Zset(有序集合)
Zset简介
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来安装从最低到最高的方式排序集合中的成员,集合的成员是唯一的,但是评分可以是重复的
因为元素是有序的,所以你也可以很快的根据评分score 或者次序 positon
来获取一个范围的元素
访问有序集合的中间元素也是很快的,因此你能够使用有序集合作为一个没有重复成员的智能列表
Zset常用命令
# zadd key [score member] 127.0.0.1:6379> zadd top 100 java 200 c++ 300 php 400 python (integer) 4 # 向Zset集合中添加元素 # zrange key start stop 127.0.0.1:6379> zrange top 0 -1#返回有序集key中,下标start stop 之间的元素 1) "java" 2) "c++" 3) "php" 4) "python" # zrange key start stop withscores 127.0.0.1:6379> zrange top 0 -1 withscores # 带withscores 可以让分数(scores)和值返回到结果集 1) "java" 2) "100" 3) "c++" 4) "200" 5) "php" 6) "300" 7) "python" 8) "400" # zrangebyscore key min max [withscores] 127.0.0.1:6379> zrangebyscore top 100 300 withscores # 返回有序集key中,所有score值介于min和max之间(包括等于min 或 max )的成员.有序集成员按score 递增 (从小到大)排序 1) "java" 2) "100" 3) "c++" 4) "200" 5) "php" 6) "300" # zrevrangebyscore key max min withscores 127.0.0.1:6379> zrevrangebyscore top +inf -inf withscores # 有序成员按照从大到小(降序)排序 1) "python" 2) "400" 3) "php" 4) "300" 5) "c++" 6) "200" 7) "java" 8) "100" # zincrby key increment value 为元素的scores加上增量 127.0.0.1:6379> zincrby top 200 java "300" 127.0.0.1:6379> zrange top 0 -1 withscores 1) "c++" 2) "200" 3) "java" 4) "300" 5) "php" 6) "300" 7) "python" 8) "400" # zrem key value 删除该集合下,指定的元素 127.0.0.1:6379> zrem top python (integer) 1 127.0.0.1:6379> zrange top 0 -1 1) "c++" 2) "java" 3) "php" # zcount key min max 统计该集合,分数区间内的元素个数 127.0.0.1:6379> zcount top 0 +inf (integer) 3 # zrank key value 返回该值在集合中的排名 从0开始(升序) 127.0.0.1:6379> zrange top 0 -1 1) "c++" 2) "java" 3) "php" 127.0.0.1:6379> zrank top php (integer) 2
数据结构
SortdSet(zset)是Rdis提供的一个非常特别的数据结构,一方面它等价于java中的数据结构Map<String Double>
可以给每个元素value赋予一个权重score,另一方面它有类似于TreeSet,内部的元素会按照score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表
zset底层使用了两个数据结构
1、hash
的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过value找到响应的score值
2、跳跃表
,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决