sorted set
redis
有序集合(sorted set
),redis
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double
类型的分数。redis
正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score
)却可以重复。
使用场景:
- 微博热点话题
- 游戏分数、积分排名榜
添加元素
- zadd :添加元素到有序列表
格式:zadd 【scorekey】【score key】【score key】【..】
例子:添加3
个元素到集合,a 70 分
;b 80 分
;c 90 分
zadd score1 70 a 80 b 90 c
获取元素
zscore
:获取key
的score
值
格式:zscore【scorekey】【key】
例子:获取 a
的 score
值
zscore score1 a
zrange
: 获取集合元素
格式:zrange 【scorekey】【start】【end】
start: 元素开始的索引,一般从 0 开始
end: 元素结束的索引,-1 代表倒数第一个元素,也就是最后一个元素。
例子:获取 score1
集合所有的元素。
zrange score1 0 -1
上面只是获取元素的 key 值,如果要 key 和 score 一起获取,需要加上 withscores
命令
//默认从小到大排序
zrange score1 0 -1 withscores
//从大到小排序
zrevrange score1 0 -1 withscores
zrangebyscore
: 根据分数范围获取集合元素
格式:zrangebyscore 【scorekey】【start】【end】
start: 开始分数
end: 结束分数
例子:获取 score1
集合分数在 10–30 之间的元素
zrangebyscore score1 10 30
扩展命令
//查找 score1 集合中分数在 10--200 之间的元素,在这些元素中,只取索引为 1 的元素往后数两个
zrangebyscore score1 10 200 withscores limit 1 2
格式:zrangebyscore key min max [withscore] [LIMIT offset count]
删除元素
- del :获取集合
格式:del 【scorekey】
- zrem :删除元素
格式:zrem 【scorekey】【key key key …】
例子:删除 a , b 的值
zrem score1 a b
- zremrangebyrank :按照元素顺序删除元素
格式:zremrangebyrank 【scorekey】【start】【end】
start : 元素开始的索引
end: 元素结束的索引
例子:删除 score1 集合前 3 个元素
zremrangebyrank score1 0 2
- zremrangebyscore :按照分数的范围删除元素
格式:zremrangebyscore 【scorekey】【start】【end】
start : 开始的分数
end: 结束的分数
例子:删除 score1 集合中 分数在 70--90
的元素
zremrangebyscore score1 70 90
其他命令
- zcard :获取集合长度
格式:zcard 【scorekey】
例子:获取 score1 集合
的长度
zcard score1
- zincrby :给元素增加值
格式:zincrby 【scorekey】【score】【key】
例子: 给 d 元素值增加 14
zincrby score1 14 d
- zcount :计算指定分数范围内元素的个数
格式:zcount 【scorekey】【startscore】【endscore】
startscore : 开始的分数
endscore: 结束的分数
例子: 计算分数在 50 到 100 之间的元素的个数
zcount score1 50 100