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

来源:互联网 发布:不同表格相同数据查找 编辑:程序博客网 时间:2024/05/21 07:46

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

命令 操作 zadd 将带有一定分值的成员添加到有序集合里面 zrem 移除成员,返回移除的数量 zcard 返回有序集合包含的成员数量 zincrby 将某个成员加上一定的分值 zcount 查询分值在min 和 max区域之间的数量 zrank 返回某个成员的排名 zscore 返回某个成员的分值 zrange 查询给定start和stop分值之间的成员 zrevrank zrevrange ZREVRANGE 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 andredis 127.0.0.1:6379> zcount zset-key 2 5(integer) 0redis 127.0.0.1:6379> zcount zset-key 2 6(integer) 0redis 127.0.0.1:6379>  zcount zset-key1 2 5(integer) 1redis 127.0.0.1:6379>  zcount zset-key1 2 5(integer) 1redis 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  -11) "b"2) "c"3) "a"--返回所有的键集合和分数redis 127.0.0.1:6379> zrange  zset-key1 0 -1 withscores1) "b"2) "5"3) "c"4) "7"5) "a"6) "8"--按排序输出redis 127.0.0.1:6379> zrevrange zset-key1 0 -1 withscores1) "a"2) "8"3) "c"4) "7"5) "b"6) "5"--redis 127.0.0.1:6379> zrevrank zset-key1 c(integer) 1redis 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 91) "b"2) "c"3) "a"redis 127.0.0.1:6379> zrangebyscore zset-key1 0 9 withscores1) "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 01) "a"2) "c"3) "b"redis 127.0.0.1:6379> zrevrangebyscore zset-key1 9 0 withscores1) "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) 3redis 127.0.0.1:6379> zrange z_ulist_1 0 -1 withscores1) "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) 3redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2(integer) 0redis 127.0.0.1:6379>  zadd z_ulist_1 20 bb(integer) 1redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2(integer) 1redis 127.0.0.1:6379> zrange z_ulist_x 0 -1 withscores1) "bb"2) "40"redis 127.0.0.1:6379>
原创粉丝点击