zadd stu:1 100 math 99 english 98 history : 添加stu:1 科目 分数
zrange user_rank 0 -1 withscores : 从小到大遍历
zrevrange user_rank 0 -1 withscores : 从大到小遍历
zremrangebyscore user_rank 0 50 : 删除分数 0 到 50 的 // 50不能用-1
zremrangebyrank user_rank 0 1: 删除 0 到1 名的成员, (从小到大的排名)
![](https://i-blog.csdnimg.cn/blog_migrate/1cc1b7035b5ac48707e324f8714580b1.png)
zcard user_rank : 统计成员个数
zrem user_rank music : 删除成员music
![](https://i-blog.csdnimg.cn/blog_migrate/f3a016d6c9da0c167a71724e16d80462.png)
获取最大值 zrevrangebyscore stu:2 +inf -inf withscores limit 0 1
从大到小遍历 zrevrangebyscore stu:2 +inf -inf withscores
获取最小值 zrangebyscore stu:2 -inf +inf withscores limit 0 1
从小到大遍历 zrangebyscore stu:2 -inf +inf withscores
在Redis中+inf表示正无穷,-inf表示负无穷。
list
expire stu:3 10 // 给任意key设置过期时间
命令 | 说明 |
用于将一个或多个成员添加到有序集合中,或者更新已存在成员的 score 值 | |
获取有序集合中成员的数量 | |
用于统计有序集合中指定 score 值范围内的元素个数 | |
用于增加有序集合中成员的分值 | |
求两个或者多个有序集合的交集,并将所得结果存储在新的 key 中 | |
返回有序集合中指定索引区间内的成员数量 | |
返回有序集中指定字典区间内的成员数量 | |
返回有序集合中指定分数区间内的成员 | |
返回有序集合中指定成员的排名 | |
移除有序集合中的一个或多个成员 | |
移除有序集合中指定排名区间内的所有成员 | |
移除有序集合中指定分数区间内的所有成员 | |
返回有序集中指定区间内的成员,通过索引,分数从高到低 | |
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 | |
返回有序集中,指定成员的分数值 | |
求两个或多个有序集合的并集,并将返回结果存储在新的 key 中 |
zset 的实现的数据结构
1. hash key 是member , value是score ,, 便于通过key(元素)获取score(分值)
2. 跳表. key 是元素的socre. 每个节点有:保存数据的robj指针,分值score字段,后退指针backward便于回溯, 因此跳跃表的层数是随机的,但通常情况下不会超过log(N)层,其中N是跳跃表中元素的个数
zset 为什么用跳表不用红黑树,
跳表支持范围查找, 并且实现起来也简单
[value,score]键值对数量少于128个;每个元素的长度小于64字节。 是使用ziplist这种结构本身并不直接包含哈希表
其他时候使用另一种存储方式(HashMap+skipList)
当需要定位到第十名的时候.从头部开始:查找过程从跳跃表的头部节点开始。
hash,hash 的作用就是关联元素 value 和权重 score,保障元素 value 的唯一性,可以通过元素 value 找到相应的 score 值。
跳跃表,跳跃表的目的在于给元素 value 排序,根据 score 的范围获取元素列表