(转) 淘淘商城系列——Redis五种数据类型介绍
http://blog.csdn.net/yerenyuan_pku/article/details/72855562
Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。下面我分別介紹之。
String(字符串)
字符串是Redis中最基本的數據類型,它能夠存儲任何類型的字符串,包含二進制數據。可以用于存儲郵箱,JSON化的對象,甚至是一張圖片,一個字符串允許存儲的最大容量為512MB。字符串是其他四種類型的基礎,與其他幾種類型的區別從本質上來說只是組織字符串的方式不同而已。
實例
這里我將使用如下命令:
- set——賦值,用法:set key value。
- get——取值,用法:set key。
- incr——遞增數字,僅僅對數字類型的鍵有用,相當于Java的i++運算,用法:incr key。
- incrby——增加指定的數字,僅僅對數字類型的鍵有用,相當于Java的i+=3,用法:incrby key increment,其意思是key自增increment,increment可以為負數,表示減少。
- decr——遞減數字,僅僅對數字類型的鍵有用,相當于Java的i–,用法:decr key。
我們使用set命令在當前redis數據庫里面設置一個key,名稱為hello,值為abcd,然后再通過get命令取值。
192.168.25.128:6379> set hello abcd OK 192.168.25.128:6379> get hello "abcd"?
如果大家想要重置名稱為hello的key的值,同樣可使用set命令,如下,再使用get命令取值,就能發現key的值已被修改。
192.168.25.128:6379> set hello 123 OK 192.168.25.128:6379> get hello "123"?
?
注意:get、set命令不區分大小寫,但key是區分大小寫的。如果大家不信,可以再使用set命令在當前redis數據庫里面設置一個key,名稱為Hello,值為456,然后使用keys *命令查看當前redis數據庫這里面有多少個key。
192.168.25.128:6379> set Hello 456 OK 192.168.25.128:6379> keys * 1) "hello" 2) "Hello"?
分別使用get命令取出以上兩個鍵所對應的值,可發現鍵為hello所對應的值是123,鍵為Hello所對應的值是456。
192.168.25.128:6379> GET Hello "456" 192.168.25.128:6379> get hello "123"?
接下來,演示incr和decr命令,關于這兩個命令我上面已經詳細講解過了,這里只給出案例。
192.168.25.128:6379> incr hello (integer) 124 192.168.25.128:6379> decr hello (integer) 123 192.168.25.128:6379> decr hello (integer) 122 192.168.25.128:6379> decr hello (integer) 121 192.168.25.128:6379> decr hello (integer) 120?
Hash(哈希)
Hash類型相當于Java中的HashMap,它的值是一個字典,保存很多key-value對,每對key-value的值和鍵都是字符串類型,換句話說,Hash類型不能嵌套其他數據類型。對此,我也有我個人的理解:這種類型相當于一個key對應一個Map,Map中還有key-value對,使用hash可對key進行歸類。
實例
這里我將使用如下命令:
- hset——賦值,用法:hset key field value。
- hget——取值,用法:hget key field。
- hincrby——增加數字,僅對數字類型的值有用,用法:hincrby key field increment。
我們使用hset命令向hash中添加內容,如下所示。
192.168.25.128:6379> hset hash1 field1 1 (integer) 1 192.168.25.128:6379> hset hash1 field2 2 (integer) 1 192.168.25.128:6379> hset hash1 field3 3 (integer) 1 192.168.25.128:6379> hset hash2 field1 a (integer) 1?
注意:一個Hash類型鍵最多可以存儲2∧32 - 1個鍵值對(40多億)。?
接著使用keys *命令查看當前redis數據庫這里面有多少個key。
?
然后可以使用hget命令從hash中取內容,如下所示。
192.168.25.128:6379> hget hash1 field1 "1" 192.168.25.128:6379> hget hash1 field2 "2" 192.168.25.128:6379> hget hash1 field3 "3" 192.168.25.128:6379> hget hash2 field1 "a"?
最后,來演示一下hincrby命令,關于這個命令我上面已經詳細講解過了,這里只給出案例。
192.168.25.128:6379> hincrby hash1 field1 2 (integer) 3 192.168.25.128:6379> hincrby hash1 field1 1 (integer) 4 192.168.25.128:6379> hincrby hash1 field1 10 (integer) 14?
List(列表)
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
實例
這里我將使用如下命令:
- lpush——向列表左端添加元素,用法:lpush key value。
- lrange——獲取列表中某一片段的元素,用法:lrange key start stop,index從0開始,-1表示最后一個元素。
- rpush——向列表右端添加元素,用法:rpush key value。
- lpop——從列表左端彈出元素,用法:lpop key。
- rpop——從列表右端彈出元素,用法:rpop key。
我們使用lpush命令向list1列表左端添加元素,如下所示,然后使用lrange list1 0 -1命令查看全部元素。
192.168.25.128:6379> lpush list1 a b c d (integer) 4 192.168.25.128:6379> lrange list1 0 -1 1) "d" 2) "c" 3) "b" 4) "a"?
注意:列表最多可存儲2∧32 - 1元素 (4294967295, 每個列表可存儲40多億)。?
接著使用rpush命令向list1列表右端添加元素,如下所示,然后使用lrange list1 0 -1命令查看全部元素。
?
緊接著,我們使用lpop命令從列表左端彈出“d”元素,然后再次使用lrange list1 0 -1命令查看全部元素,如下所示。
192.168.25.128:6379> lpop list1 "d" 192.168.25.128:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 4) "1" 5) "2" 6) "3" 7) "4"?
最后,我們使用rpop命令從列表右端彈出“4”元素,然后再次使用lrange list1 0 -1命令查看全部元素,如下所示。
192.168.25.128:6379> rpop list1 "4" 192.168.25.128:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 4) "1" 5) "2" 6) "3"?
Set(集合)
Redis中的Set是string類型元素的集合,集合中每個元素都是不同的,集合中的元素個數最多為2的32次方-1個,集合中的元素是沒有順序的,而且不能重復。
實例
這里我將使用如下命令:
- sadd——添加元素,用法:sadd key value1 [value2 value3 ...]。
- smembers——獲得集合中所有元素,用法:smembers key。
- srem——刪除元素,用法:srem key value2 [value2 value3 ...]。
我們首先使用sadd命令向set1集合中添加元素,然后使用smembers set1命令獲得集合中的所有元素,如下所示。
192.168.25.128:6379> sadd set1 a b c c c d (integer) 4 192.168.25.128:6379> smembers set1 1) "d" 2) "a" 3) "c" 4) "b"?
注意:以上實例中“c”添加了三次,但根據集合內元素的唯一性,后兩次插入的元素將被忽略。集合中最大的成員數為2∧32 - 1(4294967295,每個集合可存儲40多億個成員)。?
現在我們使用srem命令刪掉set1集合中的“a”元素,然后再使用smembers set1命令獲得集合中的所有元素,如下所示。
?
?
zset(sorted set:有序集合)
Redis中的zset和set一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。Redis正是通過分數來為集合中的成員進行從小到大的排序的。zset的成員是唯一的,但分數(score)卻可以重復。
實例
這里我將使用如下命令:
- zadd——添加元素,用法:zadd key score1 value1 [score2 value2 score3 value3 ...]。
- zrange——獲取排名在某個范圍的元素,用法:zrange key start stop [WITHSCORE],按照元素從小到大的順序排序,從0開始編號,包含start和stop對應的元素,WITHSCORE選項表示是否返回元素分數。
- zrevrange——獲取排名在某個范圍的元素,用法:zrevrange key start stop [WITHSCORE],和上一個命令用法一樣,只是這個倒序排序的。
- zrem——刪除一個或多個元素,用法:zrem key value1 [value2 ...]。
我們首先使用zadd命令向zset1集合中添加元素,然后使用zrange zset1 0 -1命令獲得集合中的所有元素(通過分數來為集合中的成員進行從小到大的排序),如下所示。
192.168.25.128:6379> zadd zset1 2 a 5 b 1 c 6 d (integer) 4 192.168.25.128:6379> zrange zset1 0 -1 1) "c" 2) "a" 3) "b" 4) "d"?
然后使用zrem命令刪除zset1集合中的“a”元素,然后使用zrange zset1 0 -1命令獲得集合中的所有元素(通過分數來為集合中的成員進行從小到大的排序),如下所示。
192.168.25.128:6379> zrem zset1 a (integer) 1 192.168.25.128:6379> zrange zset1 0 -1 1) "c" 2) "b" 3) "d"?
接著我們使用zrevrange zset1 0 -1命令獲得集合中的所有元素(通過分數來為集合中的成員進行從大到小的排序),如下所示。
192.168.25.128:6379> zrevrange zset1 0 -1 1) "d" 2) "b" 3) "c"?
還可以使用zrange zset1 0 -1 withscores命令查看元素及其分數,如下所示。
192.168.25.128:6379> zrange zset1 0 -1 withscores 1) "c" 2) "1" 3) "b" 4) "5" 5) "d" 6) "6"?
當然了,也可使用zrevrange zset1 0 -1 withscores命令查看元素及其分數,不過是通過分數來為集合中的成員進行從大到小排序的。
192.168.25.128:6379> zrevrange zset1 0 -1 withscores 1) "d" 2) "6" 3) "b" 4) "5" 5) "c" 6) "1"總結
以上是生活随笔為你收集整理的(转) 淘淘商城系列——Redis五种数据类型介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软开源 rDSN 分布式系统开发框架
- 下一篇: 崩溃!Win10 强制更新导致电脑无限重