Redis數據類型
Redis支持5種數據類型,它們描述如下:
?
Strings - 字符串
字符串是 Redis 最基本的數據類型。Redis 字符串是二進制安全的,也就是說,一個 Redis 字符串可以包含任意類型的數據,一個字符串最大為 512M 字節。
1 redis 127.0.0.1:6379> SET name "hello" 2 OK 3 redis 127.0.0.1:6379> GET name 4 "hello"
?
列表 (Lists)
Redis 列表僅僅是按照插入順序排序的字符串列表。可以添加一個元素到 Redis 列表的頭部 (左邊) 或者尾部 (右邊)。
LPUSH 命令用于插入一個元素到列表的頭部,RPUSH 命令用于插入一個元素到列表的尾部。當這兩個命令操作在一個不存在的鍵時,將會創建一個新的列表。同樣,如果一個操作會清空列表,那么該鍵將會從鍵空間 (key space) 移除。這些是非常方便的語義,因為列表命令如果使用不存在的鍵作為參數,就會表現得像命令運行在一個空列表上一樣。
1 redis 127.0.0.1:6379> lpush listtest test1 2 (integer) 1 3 redis 127.0.0.1:6379> lpush listtest test2 4 (integer) 2 5 redis 127.0.0.1:6379> lpush listtest test3 6 (integer) 3 7 redis 127.0.0.1:6379> lrange listtest 0 -1 8 9 1 "test1" 10 2 "test2" 11 3 "test3"
?
集合 (Sets)
Redis 集合是沒有順序的字符串集合 (collection)。可以在 O(1) 的時間復雜度添加、刪除和測試元素存在與否 (不管集合中有多少元素都是常量時間)。
Redis 集合具有你需要的不允許重復成員的性質。多次加入同一個元素到集合也只會有一個拷貝在其中。實際上,這意味著加入一個元素到集合中并不需要檢查元素是否已存在。
Redis 集合非常有意思的是,支持很多服務器端的命令,可以在很短的時間內和已經存在的集合一起計算并集,交集和差集。
redis 127.0.0.1:6379> sadd setdemo set1 (integer) 1 redis 127.0.0.1:6379> sadd setdemo set2 (integer) 1 redis 127.0.0.1:6379> smembers setdemo1) "set1" 2) "set2"
?
Hashes -?哈希值
Redis的哈希鍵值對的集合。 Redis的哈希值是字符串字段和字符串值之間的映射,所以它們被用來表示對象。
redis 127.0.0.1:6379> HMSET user:1 username testname password 123456 OK redis 127.0.0.1:6379> HGETALL user:11) "testname" 2) "123456"
?
有序集合 (Sorted sets)
Redis 有序集合和 Redis 集合類似,是非重復字符串集合 (collection)。不同的是,每一個有序集合的成員都有一個關聯的分數 (score),用于按照分數高低排序。盡管成員是唯一的,但是分數是可以重復的。
對有序集合我們可以通過很快速的方式添加,刪除和更新元素 (在和元素數量的對數成正比的時間內)。由于元素是有序的而無需事后排序,你可以通過分數或者排名 (位置) 很快地來獲取一個范圍內的元素。訪問有序集合的中間元素也是很快的,所以你可以使用有序集合作為一個無重復元素,快速訪問你想要的一切的聰明列表:有序的元素,快速的存在性測試,快速的訪問中間元素!
總之,有序集合可以在很好的性能下,做很多別的數據庫無法模擬的事情。
redis 127.0.0.1:6379> zadd list 0 name1 (integer) 1 redis 127.0.0.1:6379> zadd list 0 name2 (integer) 1 redis 127.0.0.1:6379> ZRANGEBYSCORE list 0 10001) "name1" 2) "name2"
?