Redis 有序集合(Zset)介绍与基本操作

Redis的有序集合和散列一样存在着键与值的映射关系,但是他提供了一系列分值的处理命令,以及分值大小的fetch和scan,比如说:我们的投票系统的排序以及利用有序集合存储cookie的过期时间。

命令操作
zadd将带有一定分值的成员添加到有序集合里面
zrem移除成员,返回移除的数量
zcard返回有序集合包含的成员数量
zincrby将某个成员加上一定的分值
zcount查询分值在min 和 max区域之间的数量
zrank返回某个成员的排名
zscore返回某个成员的分值
zrange查询给定start和stop分值之间的成员
zrevrank
zrevrangeZREVRANGE key start stop [WITHSCORES] 描述:和zrange一样使用,唯一不同是其成员位置按 score 值递减(从大到小)来排列
zrangebyscore命令格式:ZRANGEBYSCORE key min max [WITHSCORES] 描述:返回有序集key中所有score值介于min与max之间(包括等于)的成员.成员按score值递增(从小到大)排列 。min 和 max 可以是 -inf 和 +inf可选limit参数指定返回结果的数量及区间。时间复杂度:O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。
zrevrangebyscore和上面那个指令一样 只是返回结果已经排序了
zremrangebyrank命令格式: ZREMRANGEBYRANK key start stop描述:移除有序集 key 中,指定排名(rank)区间内的所有成员。区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。返回值:被移除成员的数量。
zremrangebyscore命令格式:zremrangebyscore key min max 描述:移除score值介于min和max之间(等于)的成员时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。返回值:被移除成员的数量。
zunionstore命令格式:ZUNIONSTORE destination numkeys key [key …]描述:计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。
zinterstore命令格式:ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight 描述:计算给定的一个或多个有序集的交集。其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。时间复杂度:O(N*K)+O(M*log(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数。返回值:保存到 destination 的结果集成员数。
--加入分值的数据:错误示范(数字应该写在前面)
redis 127.0.0.1:6379> zadd zset-key1 a 5 b 9 c 10 d 3
(error) ERR value is not a double
--正确示范
redis 127.0.0.1:6379> zadd zset-key1 3 a 5 b 7 c
(integer) 3
--返回数据个数
redis 127.0.0.1:6379> zcard zset-key1
(integer) 3
--给某个键的值加一个给定值
redis 127.0.0.1:6379> zincrby zset-key1 5 a
"8"
--查询分值在某个范围的数量 类似于关系数据库里面的between and
redis 127.0.0.1:6379> zcount zset-key 2 5
(integer) 0
redis 127.0.0.1:6379> zcount zset-key 2 6
(integer) 0
redis 127.0.0.1:6379>  zcount zset-key1 2 5
(integer) 1
redis 127.0.0.1:6379>  zcount zset-key1 2 5
(integer) 1
redis 127.0.0.1:6379> zcount zset-key1 2 10
(integer) 3
--查询某个键的值
redis 127.0.0.1:6379> zrank zset-key1 c
(integer) 1
--查询某个键的分值
redis 127.0.0.1:6379> zscore zset-key1 c
"7"
--返回所有的键集合
redis 127.0.0.1:6379> zrange zset-key1 0  -1
1) "b"
2) "c"
3) "a"
--返回所有的键集合和分数
redis 127.0.0.1:6379> zrange  zset-key1 0 -1 withscores
1) "b"
2) "5"
3) "c"
4) "7"
5) "a"
6) "8"
--按排序输出
redis 127.0.0.1:6379> zrevrange zset-key1 0 -1 withscores
1) "a"
2) "8"
3) "c"
4) "7"
5) "b"
6) "5"
--
redis 127.0.0.1:6379> zrevrank zset-key1 c
(integer) 1
redis 127.0.0.1:6379> zrevrank zset-key1 a
(integer) 0
--错误示范 加了rev的必须是大分值写在前面
redis 127.0.0.1:6379> zrevrangebyscore zset-key1 4 8
(empty list or set)
redis 127.0.0.1:6379> zrevrangebyscore zset-key1 -inf inf
(empty list or set)
--没加rev排序就是小分值写在前面
redis 127.0.0.1:6379> zrangebyscore zset-key1 0 9
1) "b"
2) "c"
3) "a"
redis 127.0.0.1:6379> zrangebyscore zset-key1 0 9 withscores
1) "b"
2) "5"
3) "c"
4) "7"
5) "a"
6) "8"
redis 127.0.0.1:6379> zrevrangebyscore zset-key1 0 9
(empty list or set)
redis 127.0.0.1:6379>  zrevrangebyscore zset-key1 9 0
1) "a"
2) "c"
3) "b"
redis 127.0.0.1:6379> zrevrangebyscore zset-key1 9 0 withscores
1) "a"
2) "8"
3) "c"
4) "7"
5) "b"
6) "5"
--移除下标在某个范围内的 相比zremrangebyscore就是移除在分值某个范围里面的 
redis 127.0.0.1:6379> zremrangebyrank zset-key1 0 7
(integer) 3
--交集检验
redis 127.0.0.1:6379> zadd z_ulist_1 20 jack 30 tom 50 wy
(integer) 3
redis 127.0.0.1:6379> zrange z_ulist_1 0 -1 withscores
1) "jack"
2) "20"
3) "tom"
4) "30"
5) "wy"
6) "50"
redis 127.0.0.1:6379> zadd z_ulist_2 20 bb 40 789 48 a
(integer) 3
redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2
(integer) 0
redis 127.0.0.1:6379>  zadd z_ulist_1 20 bb
(integer) 1
redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2
(integer) 1
redis 127.0.0.1:6379> zrange z_ulist_x 0 -1 withscores
1) "bb"
2) "40"
redis 127.0.0.1:6379>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值