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的范围获取元素列表

posted @   小罗要有出息  阅读(496)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示