Redis散列与有序集合
前面文章我们介绍了列表与集合中的基本命令,本文我们来看看Redis中的散列与有序集合。
本文是Redis系列的第六篇文章,了解前面的文章有助于更好的理解本文:
1.Linux上安装Redis
2.Redis中的五种数据类型简介
3.Redis字符串(STRING)介绍
4.Redis字符串(STRING)中BIT相关命令
5.Redis列表与集合
散列
很多时候,散列就像一个微缩版的redis,在本文中,小伙伴们对看到的许多散列命令都会有似曾相识的感觉。
HSET
HSET命令可以用来设置key指定的哈希集中指定字段的值,如下:
127.0.0.1:6379> HSET k1 h1 v1
(integer) 1
HGET
HGET命令可以用来返回key指定的哈希集中该字段所关联的值,如下:
127.0.0.1:6379> HGET k1 h1
"v1"
HMSET
HMSET命令可以批量设置key指定的哈希集中指定字段的值,如下:
127.0.0.1:6379> HMSET k2 h1 v1 h2 v2 h3 v3
OK
HMGET
HMGET可以批量返回key指定的哈希集中指定字段的值,如下:
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"
HDEL
HDEL命令可以从key指定的哈希集中移除指定的域,在哈希集中不存在的域将被忽略,如下:
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> HDEL k2 h1
(integer) 1
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) (nil)
2) "v2"
3) "v3"
HSETNX
HSETNX命令只在key指定的哈希集中不存在指定的字段时,设置字段的值,如果字段已存在,该操作无效果。如下:
127.0.0.1:6379> HSETNX k2 h3 1
(integer) 0
127.0.0.1:6379> HSETNX k2 h4 1
(integer) 1
HVALS
HVALS命令可以返回key指定的哈希集中所有字段的值,如下:
127.0.0.1:6379> HVALS k2
1) "v2"
2) "v3"
3) "1"
HKEYS
HKEYS命令可以返回key指定的哈希集中所有字段的名字,如下:
127.0.0.1:6379> HKEYS k2
1) "h2"
2) "h3"
3) "h4"
HGETALL
HGETALL命令可以返回key指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍,如下:
127.0.0.1:6379> HGETALL k2
1) "h2"
2) "v2"
3) "h3"
4) "v3"
5) "h4"
6) "1"
HEXISTS
HEXISTS命令可以返回hash里面field是否存在,如下:
127.0.0.1:6379> HEXISTS k2 h3
(integer) 1
HINCRBY
HINCRBY可以增加key指定的哈希集中指定字段的数值。如果key不存在,会创建一个新的哈希集并与key关联。如果字段不存在,则字段的值在该操作执行前被设置为0,HINCRBY支持的值的范围限定在64位有符号整数,如下:
127.0.0.1:6379> HEXISTS k2 h3
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> HGET k2 h4
"1"
127.0.0.1:6379> HINCRBY k2 h4 5
(integer) 6
127.0.0.1:6379> HGET k2 h4
"6"
127.0.0.1:6379> HGET k2 h5
(nil)
127.0.0.1:6379> HINCRBY k2 h5 99
(integer) 99
127.0.0.1:6379> HGET k2 h5
"99"
HINCRBYFLOAT
HINCRBYFLOAT与HINCRBY用法基本一致,只不过这里允许float类型的数据,不赘述。
HLEN
HLEN返回key指定的哈希集包含的字段的数量,如下:
127.0.0.1:6379> HLEN k2
(integer) 4
HSTRLEN
HSTRLEN可以返回hash指定field的value的字符串长度,如果hash或者field不存在,返回0,如下:
127.0.0.1:6379> HSTRLEN k2 h2
(integer) 2
有序集合
有序集合类似Sets,但是每个字符串元素都关联到一个叫score浮动数值。里面的元素总是通过score进行着排序,因此它是可以检索的一系列元素。
ZADD
ZADD命令可以将所有指定成员添加到键为key的有序集合里面。添加时可以指定多个分数/成员(score/member)对。 如果指定添加的成员已经是有序集合里面的成员,则会更新该成员的分数(scrore)并更新到正确的排序位置。如下:
127.0.0.1:6379> ZADD k1 60 v1
(integer) 1
ZSCORE
ZSCORE命令可以返回有序集key中,成员member的score值。如下:
127.0.0.1:6379> ZSCORE k1 v1
"60"
ZRANGE
ZRANGE命令可以根据index返回member,该命令在执行时加上withscores参数可以连同score一起返回:
127.0.0.1:6379> ZRANGE k1 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> ZRANGE k1 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"
ZREVRANGE
ZREVRANGE和ZRANGE功能基本一致,不同的是ZREVRANGE是反着来的,如下:
127.0.0.1:6379> ZREVRANGE k1 0 3
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> ZREVRANGE k1 0 3 withscores
1) "v5"
2) "100"
3) "v4"
4) "90"
5) "v3"
6) "80"
7) "v2"
8) "70"
ZCARD
ZCARD命令可以返回key的有序集元素个数。如下:
127.0.0.1:6379> ZCARD k1
(integer) 5
ZCOUNT
ZCOUNT命令可以返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。如下:
127.0.0.1:6379> ZCOUNT k1 60 90
(integer) 4
如果在统计时,不需要包含60或者90,则添加一个 ( 即可,如下:
127.0.0.1:6379> ZCOUNT k1 60 (90
(integer) 3
ZRANGEBYSCORE
ZRANGEBYSCORE命令可以按照score范围范围元素,加上withscores可以连score一起返回。如下:
127.0.0.1:6379> ZRANGEBYSCORE k1 60 80
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> ZRANGEBYSCORE k1 60 80 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> ZRANGEBYSCORE k1 (60 80 withscores
1) "v2"
2) "70"
3) "v3"
4) "80"
ZRANK
ZRANK命令可以返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。排名以0为底,即score值最小的成员排名为0。如下:
127.0.0.1:6379> ZRANK k1 v1
(integer) 0
127.0.0.1:6379> ZRANK k1 v2
(integer) 1
ZREVRANK
ZREVRANK和ZRANK命令功能基本一致,不同的是,ZREVRANK中的排序是从大到小:
127.0.0.1:6379> ZREVRANK k1 v1
(integer) 4
127.0.0.1:6379> ZREVRANK k1 v2
(integer) 3
ZINCRBY
ZINCRBY命令可以为有序集key的成员member的score值加上增量increment。如果key中不存在member,就在key中添加一个member,score是increment(就好像它之前的score是0.0)。如果key不存在,就创建一个只含有指定member成员的有序集合:
127.0.0.1:6379> ZINCRBY k1 3 v1
"63"
127.0.0.1:6379> ZRANGE k1 0 0 withscores
1) "v1"
2) "63"
ZINTERSTORE
ZINTERSTORE命令可以计算给定的numkeys个有序集合的交集,并且把结果放到destination中。 在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)。该命令也可以在执行的过程中给原score乘以weights后再求和,如下:
127.0.0.1:6379> ZADD k2 2 v1
(integer) 1
127.0.0.1:6379> ZADD k2 3 v2
(integer) 1
127.0.0.1:6379> ZADD k2 4 v3
(integer) 1
127.0.0.1:6379> ZADD k3 9 v2
(integer) 1
127.0.0.1:6379> ZADD k3 10 v3
(integer) 1
127.0.0.1:6379> ZADD k3 11 v4
(integer) 1
127.0.0.1:6379> ZINTERSTORE k4 2 k2 k3
(integer) 2
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
1) "v2"
2) "12"
3) "v3"
4) "14"
127.0.0.1:6379> ZINTERSTORE k5 2 k2 k3 weights 3 1
(integer) 2
127.0.0.1:6379> ZRANGE k5 0 -1 withscores
1) "v2"
2) "18"
3) "v3"
4) "22"
ZREM
ZREM命令可以从集合中弹出一个元素,如下:
127.0.0.1:6379> ZRANGE k2 0 -1 withscores
1) "v1"
2) "2"
3) "v2"
4) "3"
5) "v3"
6) "4"
127.0.0.1:6379> ZREM k2 v1
(integer) 1
127.0.0.1:6379> ZRANGE k2 0 -1 withscores
1) "v2"
2) "3"
3) "v3"
4) "4"
ZLEXCOUNT
ZLEXCOUNT命令用于计算有序集合中指定成员之间的成员数量。如下:
127.0.0.1:6379> ZLEXCOUNT k2 - +
(integer) 2
127.0.0.1:6379> ZLEXCOUNT k2 [v2 [v4
(integer) 2
注意:可以用-和+表示得分最小值和最大值,如果使用成员名的话,一定要在成员名之前加上[。
ZRANGEBYLEX
ZRANGEBYLEX 返回指定成员区间内的成员,按成员字典正序排序, 分数必须相同。如下:
127.0.0.1:6379> ZRANGEBYLEX k2 [v2 [v4
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYLEX k2 - +
1) "v2"
2) "v3"
127.0.0.1:6379>
注意min和max参数的写法和ZLEXCOUNT一致。
OK,散列和有序集合的命令我们就介绍这么多,更多命令小伙伴们可以参考官方文档http://www.redis.cn/commands.html。小伙伴在看官方文档时,有什么问题欢迎留言讨论。
更多资料请关注公众号: