述
上文中,介紹了list和set的一些常用的命令,下面再來看一下散列和有序集合的一些常用的命令
散列(hash)
和java中的hashmap其實是差不多的,redis其實就是存放的鍵值對,散列也是存放的鍵值對,,下面來具體看下一下一些常用的操作
hset
hset用來設(shè)置key指定的哈希集中指定字段的值, 如果key指定的哈希集不存在,就會創(chuàng)建一個新的哈希集并與key關(guān)聯(lián),如果字段在哈希集中存在,它將被重寫,具體使用如下:
172.16.12.3:6379> hset myhash field1 hello
(integer) 1
這里的返回值:
- 1: 表示這個field是一個新的字段
- 0: 表示這個field是原來已經(jīng)存在的
hget
hget用來返回key指定的哈希集中某一個field的值,如下:
172.16.12.3:6379> hget myhash field1
"hello"
hmset
hmset,批量添加的命令,使用如下:
172.16.12.3:6379> hmset myhash field2 world field3 java field4 php
OK
hmget
是一個批量查詢的命令,如下:
172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) "hello"
2) "world"
3) "java"
4) "php"
hdel
用來刪除key指定的哈希集中指定的field,如果這個field不存在,則會被忽略,如下:
172.16.12.3:6379> hdel myhash field1
(integer) 1
172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) (nil)
2) "world"
3) "java"
4) "php"
hsetnx
hsetnx命令,只在key指定的哈希集中,不存在指定的字段時再設(shè)置字段的值,如果是已經(jīng)存在的,則命令無效,如下:
172.16.12.3:6379> hsetnx myhash field4 c++
(integer) 0
172.16.12.3:6379> hsetnx myhash field5 c++
(integer) 1
hvals
用來返回key指定的哈希集中的所有字段的值,如下:
172.16.12.3:6379> hvals myhash
1) "world"
2) "java"
3) "php"
4) "c++"
hkeys
用來返回key指定的哈希集中的所有字段的名字,如下:
172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"
hgetall
返回key指定的哈希集中的所有字段和值,在返回值中,每個字段名的下一個是他的值,返回值的長度是該哈希集大小的兩倍,如下:
172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"
hexists
用來判斷key對應(yīng)的哈希集中,指定的field是否存在,如下:
172.16.12.3:6379> hexists myhash field1
(integer) 0
172.16.12.3:6379> hexists myhash field2
(integer) 1
hincrby
用來增加key指定的哈希集中指定字段的數(shù)值
如果指定的哈希集不存在,那就會創(chuàng)建一個新的hash并與key關(guān)聯(lián)
如果字段不存在,則字段的值在該操作執(zhí)行前被設(shè)置為0
hincrby命令支持的值的范圍限定在64位有符號整數(shù)
172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"
172.16.12.3:6379> hset myhash field6 1
(integer) 1
172.16.12.3:6379> hincrby myhash field6 9
(integer) 10
172.16.12.3:6379> hincrby myhash field7 6
(integer) 6
172.16.12.3:6379> hget myhash field6
"10"
172.16.12.3:6379> hget myhash field7
"6"
hincrbyfloat
和上面的hincrby用法一樣,只不過是可以加float類型的數(shù)據(jù)
172.16.12.3:6379> hincrbyfloat myhash field7 1.55
"7.55"
172.16.12.3:6379> hget myhash field7
"7.55"
hlen
可以獲取到key指定的哈希集包含的字段的數(shù)量,如下:
172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"
5) "field6"
6) "field7"
172.16.12.3:6379> hlen myhash
(integer) 6
hstrlen
獲取key指定的哈希集中的,指定的field對應(yīng)的value的長度 ,如果field不存在的話,就返回0,如下:
172.16.12.3:6379> hstrlen myhash field2
(integer) 5
172.16.12.3:6379> hstrlen myhash field7
(integer) 4
172.16.12.3:6379> hstrlen myhash field8
(integer) 0
有序集合(zset)
有序集合類似set,但是每個字符串元素都關(guān)聯(lián)到一個score的數(shù)值,里面的元素總是通過score進行著排序,因此它是可以檢索的一系列元素
zadd
往鍵為key的集合里面添加元素
添加時,可以指定多個分?jǐn)?shù)/成員(score/member)對,如果指定添加的成員已經(jīng)存在,則會更新分?jǐn)?shù),然后將成員更新到正確的位置,如下:
172.16.12.3:6379> zadd myzset 60 v1
(integer) 1
首先是key,然后分?jǐn)?shù),最后是值.
zscore
返回有序集合key中, 指定成員的score值,如下:
172.16.12.3:6379> zscore myzset v1
"60"
zrange
zrange 命令可以根據(jù)下標(biāo)返回元素, 要指定開始和結(jié)束的下標(biāo), 還可以加一個withscores 參數(shù),可以將元素的score
172.16.12.3:6379> zadd myzset 61 v2
(integer) 1
172.16.12.3:6379> zadd myzset 62 v3
(integer) 1
172.16.12.3:6379> zadd myzset 63 v4
(integer) 1
172.16.12.3:6379> zrange myzset 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"
172.16.12.3:6379> zrange myzset 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"
zrevrange
zrevrange和zrange的功能基本一樣,只不過zrevrange返回數(shù)據(jù)的順序是反著的,如下:
172.16.12.3:6379> zrevrange myzset 0 3 withscores
1) "v4"
2) "63"
3) "v3"
4) "62"
5) "v2"
6) "61"
7) "v1"
8) "60"
172.16.12.3:6379> zrevrange myzset 0 3
1) "v4"
2) "v3"
3) "v2"
4) "v1"
zcard
可以返回zset中元素的個數(shù),如下:
172.16.12.3:6379> zcard myzset
(integer) 4
zcount
zcount可以返回有序集key中棍好,score值在min和max之間(默認(rèn)包括score值等于min或max)的成員的數(shù)量
172.16.12.3:6379> zcount myzset 60 63
(integer) 4
如果我們想統(tǒng)計的不需要包含 開始或者結(jié)束區(qū)間的值,可以加一個(,如下:
172.16.12.3:6379> zcount myzset 60 (63
(integer) 3
172.16.12.3:6379> zcount myzset (60 (63
(integer) 2
zrangebyscore
zrangebyscore,可以按照分?jǐn)?shù)的范圍,獲取對應(yīng)的元素,加上withscores可以連score一起返回,如下:
172.16.12.3:6379> zrangebyscore myzset 60 63
1) "v1"
2) "v2"
3) "v3"
4) "v4"
172.16.12.3:6379> zrangebyscore myzset 60 63 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"
172.16.12.3:6379> zrangebyscore myzset (60 (63
1) "v2"
2) "v3"
zrank
zrank,可以返回有序集合中指定成員的排名, 在zset中,成員的排名是按照score分?jǐn)?shù)從小到大去排序的,排名是從0開始的,如下:
172.16.12.3:6379> zrank myzset v1
(integer) 0
172.16.12.3:6379> zrank myzset v3
(integer) 2
zrevrank
zrevrank和zrank是差不多的,只不過zrevrank是按照score是從大到小去排序的,如下:
172.16.12.3:6379> zrevrank myzset v3
(integer) 1
172.16.12.3:6379> zrevrank myzset v1
(integer) 3
zincrby
語法是:
zincrby key increment member
為有序集合key的成員member的score值加上增量increment
如果key中不存在member,就在key中添加一個member,score是increment
如果key不存在,就創(chuàng)建一個只含有指定member成員的有序集合.
當(dāng)key不是有序集類型時,返回一個錯誤
172.16.12.3:6379> zincrby myzset 10 v1
"70"
zinterstore
語法如下:
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
該命令是用來計算給定的numkeys個有序集合的交集,并且把結(jié)果放到destination中
在給定要計算的key和其它參數(shù)之前,必須先給定key個數(shù)(numberkeys)
默認(rèn)情況下,結(jié)果集destination中一個元素的分?jǐn)?shù)是有序集合中該元素分?jǐn)?shù)之和,前提是該元素在這些有序集合中都存在,因為交集要求其成員必須是給定的每個有序集合中的成員
WEIGHTS,是在執(zhí)行的過程中給原score乘以weights后再求和
如果destination存在峻村,就把它覆蓋
返回值是結(jié)果有序集合destination中元素個數(shù)
具體使用如下:
172.16.12.3:6379> zadd zset1 1 one
(integer) 1
172.16.12.3:6379> zadd zset1 2 two
(integer) 1
172.16.12.3:6379> zadd zset2 1 one
(integer) 1
172.16.12.3:6379> zadd zset2 2 two
(integer) 1
172.16.12.3:6379> zadd zset2 3 three
(integer) 1
172.16.12.3:6379> zinterstore outzset 2 zset1 zset2 weights 2 3
(integer) 2
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "one"
2) "5"
3) "two"
4) "10"
zrem
zrem命令,可以從集合中移除一個元素,如下:
172.16.12.3:6379> zrem outzset one
(integer) 1
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "two"
2) "10"
zlexcount
命令用于計算有序集合中指定成員之間的成員數(shù)量,如下:
172.16.12.3:6379> zrange myzset 0 -1 withscores
1) "v2"
2) "61"
3) "v3"
4) "62"
5) "v4"
6) "63"
7) "v1"
8) "70"
172.16.12.3:6379> zlexcount myzset - +
(integer) 4
172.16.12.3:6379> zlexcount myzset [v1 [v2
(integer) 1
可以用-和+表示得分最小值和最大值,如果使用成員名的話,一定要在成員名之前加上[.
zrangebylex
zrangebylex返回指定成員區(qū)間內(nèi)的成員,按成員字典正序排序, 分?jǐn)?shù)必須相同,如下:
172.16.12.3:6379> zrangebylex myzset [v1 [v2
1) "v2"
172.16.12.3:6379> zrangebylex myzset - +
1) "v2"
2) "v3"
3) "v4"
4) "v1"
好了,就介紹這么多的命令,其他需要的話,請參考官方文檔