转自:https://www.runoob.com/redis/redis-sorted-sets.html
1.zset数据结构
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
操作时间复杂度:
在redis sorted sets里面当items内容大于64的时候同时使用了hash和skiplist两种设计实现。这也会为了排序和查找性能做的优化。所以如上可知:
- 添加和删除都需要修改skiplist,所以复杂度为O(log(n))。 但是如果仅仅是查找元素的话可以直接使用hash,其复杂度为O(1)
- 其他的range操作复杂度一般为O(log(n))
- 当然如果是小于64的时候,因为是采用了ziplist的设计,其时间复杂度为O(n)
> ZADD runoobkey 1 redis (integer) 1 > ZADD runoobkey 2 mongodb (integer) 1 > ZADD runoobkey 3 mysql (integer) 1 > ZADD runoobkey 3 mysql (integer) 0 > ZADD runoobkey 4 mysql (integer) 0 > ZRANGE runoobkey 0 10 WITHSCORES //打印有序集成员及成员的分数值 1) "redis" 2) "1" 3) "mongodb" 4) "2" 5) "mysql" 6) "4" > ZRANGE runoobkey 0 10 //只打印有续集成员 1) "redis" 2) "mongodb" 3) "mysql"
2.Zrangebyscore /ZREVRANGEBYSCORE
Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列。默认情况下,区间的取值使用闭区间,可以通过给参数前增加 ( 符号来使用可选的开区间。
Zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典逆序来排列。redis 127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
用法:
> ZRANGEBYSCORE runoobkey 1 3 //打印值在[1,3]之间的元素 1) "redis" 2) "mongodb" > ZRANGEBYSCORE runoobkey 1 3 WITHSCORES //打印分数 1) "redis" 2) "1" 3) "mongodb" 4) "2" > ZRANGEBYSCORE runoobkey 1 3 WITHSCORES limit 1 10 //偏移量为1,偏移1个取10个 1) "mongodb" 2) "2" > ZREVRANGEBYSCORE runoobkey 3 1 WITHSCORES //逆序,从大大小,那么max值在前, min在后 1) "mongodb" 2) "2" 3) "redis" 4) "1" > ZREVRANGEBYSCORE runoobkey 3 1 WITHSCORES limit 1 10 //偏移一个 1) "redis" 2) "1"
offset就是偏移量,比如从第几个开始,而count表示取几条数据。
标签:zset,runoobkey,mongodb,成员,redis,命令,WITHSCORES,mysql From: https://www.cnblogs.com/BlueBlueSea/p/16962011.html