八、【Redis】 sorted set类型操作

本文深入讲解Redis有序集合(sortedset)的特性与操作方法,包括成员的添加、查看、统计及移除,以及如何进行集合运算。有序集合允许成员关联一个double类型的分数,用于排序,成员唯一但分数可重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

一、Redis 有序集合(sorted set)

二、添加成员

三、查看、统计成员

四、移除成员

五、运算


一、Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^{32} - 1 (4294967295, 每个集合可存储40多亿个成员)。

二、添加成员

(1)向有序集合添加一个或多个成员,或者更新已存在成员的分数

 zadd key [NX|XX] score member [score member ...]

示例:

127.0.0.1:6379> zadd age 20 s1 20 s2 22 s3 24 s4
(integer) 4
127.0.0.1:6379> zadd age 25 s5
(integer) 1

三、查看、统计成员

1.查看

(1)通过索引区间返回有序集合成指定区间内的成员

zrange key start stop [WITHSCORES]

(2)返回有序集中指定区间内的成员,通过索引,分数从高到底

 zrevrange key start stop [WITHSCORES]

(3)通过分数返回有序集合指定区间内的成员

 zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

(4)返回有序集合中指定成员的索引

 zrank key member

(5)返回有序集中指定分数区间内的成员,分数从高到低排序

zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

(6)返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

 zrevrank key member

(7)返回有序集中,成员的分数值

zscore key member

2.统计

(1)获取有序集合的成员数

 zcard key

(2)计算在有序集合中指定区间分数的成员数

 zcount key min max

四、移除成员

(1) 移除有序集合中的一个或多个成员

zrem key member [member ...]

(2)移除有序集合中给定的排名区间的所有成员

 zremrangebyrank key start stop

(3)移除有序集合中给定的分数区间的所有成员

 zrange age 0 -1

五、运算

(1)计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中。Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

zinterstore destination numkeys key [key ...] 

(2)计算给定的一个或多个有序集的并集,并存储在新的 key 中。Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。

 zinterstore destination numkeys key [key ...]

### RedisSorted Set 类型的相关信息 #### Sorted Set 数据结构概述 Sorted Set 是一种有序集合,其中每个成员都关联着一个数(score),这个数决定了该成员在这个集合中的顺序。如果多个成员具有相同的数,则这些成员按照字典序排列[^1]。 #### 底层实现原理 Sorted Set 的底层是由跳跃表(skiplist)来实现的,这是一种可以在 O(log N) 时间复杂度内完成插入、删除以及范围查询操作的数据结构。相比于平衡树等其他可能的选择,跳跃表在并发环境下的表现更为出色,因此被选作 Redis 实现 Sorted Set 的基础数据结构[^2]。 #### 基本命令介绍 以下是几个常用的针对 Sorted Set 的命令: - **ZADD**: 向指定 key 对应的 sorted set 添加一个或多个 member 及其 score;如果某个 member 已经存在则会更新对应的 score。 ```bash ZADD myzset 1 "one" ZADD myzset 2 "two" ``` - **ZRANGE / ZREVRANGE**: 获取按升序/降序排序后的给定区间内的元素及其 scores。 ```bash ZRANGE myzset 0 -1 WITHSCORES ZREVRANGE myzset 0 -1 WITHSCORES ``` - **ZREM**: 移除 one 或 more 成员。 ```bash ZREM myzset "one" ``` - **ZCARD**: 返回集合中元素的数量。 ```bash ZCARD myzset ``` - **ZCOUNT**: 统计某范围内(score 范围)有多少个元素。 ```bash ZCOUNT myzset 1 2 ``` - **ZINCRBY**: 将已存在的 member 的 score 加上增量 increment。 ```bash ZINCRBY myzset 1 "two" ``` 更多高级功能还包括交集(ZINTERSTORE)、并集(ZUNIONSTORE)运算等功能,在实际应用中有广泛用途[^4]。 #### 场景案例析 由于支持高效的排名计算和范围检索能力,Sorted Set 特别适合用来构建如下几种典型应用场景: - **排行榜系统**:基于用户的积或者其他指标创建实时更新的排行榜; - **地理信息系统(GIS)**:存储地理位置坐标,并快速获取附近地点列表; - **社交网络好友推荐**:依据共同兴趣等因素为用户推送潜在朋友; - **缓存热点文章**:记录每篇文章访问次数以便于展示最受欢迎的内容[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值