`

Redis 有序集合类型概述

阅读更多
  • 有序集合类型的概念
  • 有序集合类型的底层实现
  • 有序集合类型的应用场景


有序集合类型概念
sorted set 是 set 的一个升级版本,它在set的基础上增加了一个顺序属性(元素关联了一个分数),这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。

底层实现
Redis  有序集合类型使用两种数据结构作为底层实现:
1. 压缩列表


2. 跳跃表
当有序集合对象保存的所有元素数量不超过128且元素成员长度都小于64字节时使用压缩列表;不满足这个条件的集合对象跳跃表。

当跳跃表(skiplist)是一种随机化的数据,这种数据结构以有序的方式在层次化的链表中保存元素,它的效率可以和平衡树媲美——查找、删除、添加等操作都可以在对数期望时间下完成,并且比起平衡树来说,跳跃表的实现要简单直观得多。



底层实现
Sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构;使用sorted set可以固件有优先级的队列系统、排行榜应用、取top n操作。

有序集合类型与列表的比较,相同点:
二者都是有序的。
二者都可以获得某一范围的元素。
不同点:
列表通过链表实现,获取靠近两端的数据速度快,适合“新鲜事”和“日志”。
有序集合使用散列表和跳跃表实现,读取中间数据速度也快。
列表不能简单的调整元素的位置,而有序集可以。
有序集合比列表类型更耗内存。

Redis 有序集合类型的命令操作
  • zadd、zrem与zcard命令
  • 跟有序集合元素分数相关的命令
  • 跟有序集合元素排名相关的命令
  • 计算交集并集命令


ZADD
语法:ZADD  key  score   member

解释:用来向有序集合中添加一个元素和该元素的分数,返回值表示成功加入的元素数量(不包含原来已经存在的元素)。可一次添加多个元素及其元素的分数。

ZREM
语法:ZREM  key   member

解释:用来删除一个或多个元素,返回值表示成功删除的元素数量。

ZCARD
语法:ZCARD  key 

解释:用来获得集合中元素的数量。

ZSCORE
语法:SCORE  key   member

解释:用来获得元素的分数。

ZINCRBY
语法:ZINCRBY  key  increment  member

解释:用来增加一个元素的分数,返回值是更改后的分数。

ZRANGEBYSCORE
语法:ZRANGEBYSCORE  key  min   max  [ WITHSCORES ] [ LIMIT offset count ]

解释:按照分数从小到大的顺序返回分数在 min 和 max (包含 min 和 max)之间的元素。
若不包含端点,可在分数前加上“(”
Min 和 max 支持无穷大 inf
Withscore 返回的数据格式为 元素+分数
LIMIT 表示在获得元素的基础上从第 offset 个开始的 count 个元素

ZCOUNT
语法:ZCOUNT  key   min  max

解释:用来获得指定分数范围内的元素个数。
ZREMRANGEBYSCORE
语法:ZREMRANGEBYSCORE  key  min   max

解释:按照分数范围删除元素,返回值是删除的元素数量。

ZRANGE(ZREVRANGE)
语法:ZRANGE(ZREVRANGE)  key  start   stop  [ WITHSCORES ]

解释:按照元素分数从小(大)到大(小)的顺序返回索引从 start 到 stop 之间的所有元素。


ZRANK(ZREVRANK)
语法:ZRANK (ZREVRANK) key   member

解释:用来获得元素的排名,分数最小(大)的排名为0。

ZREMRANGEBYRANK
语法:ZREMRANGEBYRANK  key start  stop

解释:此命令用来删除指定排名范围内的所有元素,并返回删除的元素数量。

ZINTERSTORE
语法:ZINTERSTORE  dest  numkeys  key  [key …]   [ WEIGHTS weight ]
[ AGGREGATE  SUM|MIN|MAX ]

解释:此命令用来计算多个有序集合的交集并将结果存储在 dest 键中,返回值为 dest 键中的元素个数。
WEIGHTS 参数设置每个集合的权重,运算时,内部元素分数乘以该集合的权重
AGGREGATE 参数用来决定 dest 键中元素的分数,可求和、最大值、最小值
  • 大小: 50.8 KB
  • 大小: 24.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics