Redis之sorted sets类型及操作

本文深入探讨Redis中的Sorted Set数据结构,介绍其基本概念、内部实现原理及常用命令。Sorted Set是一种集合类型的数据结构,除了存储string类型的元素外,还允许为每个元素设置一个double类型的score值,以此来对元素进行排序。

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

SORTED SETS

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。
当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另一个score到元素的映射被添加到skip list,并按照score排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skip list的开销一致,redis的skip list实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set最经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为score存储,对象的id当元素存储。


zadd
向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序
zadd key [NX|XX] [CH] [INCR] score member [score member …]
其中:
- NX:不更新存在的成员,只添加新成员
- XX:仅仅更新存在的成员,不添加新成员
- CH:修改返回值为发生变化的成员总数,原始是返回新添加成员的总数(CH是change的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,zadd返回值只计算新添加成员的数量
- INCR:当zadd指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

zrem
删除名称为key的zset中的元素member
zrem key member [member …]

zincrby
如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

zrank
返回名称为key的zset中member元素的排名(按score从小到大排序)即下标
zrank key member

zrange
显示名称为key的所选范围的member(和score)
zrange key start stop [withscores]

zrevrank
返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
zrevrank key member

zrevrange
返回名称为key的zset(按score从大到小排序)中的index从start到end的所有元素
zrevrange key start stop [withscores]

zrangebyscore
返回集合中score在给定区间的元素
zrangebyscore key min max [withscores]

zcount
返回集合中score在给定区间的数量
zcount key min max

zcard
在是集合中元素个数
zcard key

zscore
返回给定元素打印的score
zscore key member

zremrangebyrank
删除集合中排名在给定区间的元素
zremrangebyrank key start stop

zremrangebyscore
删除集合中score在给定区间的元素
zrmemrangebyscore key start stop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值