Redis数据类型之有序集合

数据形式

k e y − − > { v a l u e 1 , v a l u e 2 , . . . } key-->\{value1,value2,...\} key>{ value1,value2,...}

  1. 有序集合是有序的,去重的容器数据结构
  2. 值只能为字符串,最多 2 32 − 1 2^{32}-1 2321
  3. 这里每个元素对应一个分数,并按照分数从小到大排序

常用命令

1.添加元素,查看元素

#添加元素时,在前面加一个分数
zadd z1 1 a 3 b 2 c
#查看所有元素,正向分值从小到大
zrange z1 0 -1
#反向,分值从大到小
zrevrange z1 0 -1
python
r.zadd("z1",{"a":1,"b":3,"c":2})
返回插入元素个数
r.zrange("z1",0,-1)
返回元素列表
r.zrevrange("z1",0,-1)

2.查看元素c的分数

zscore z1 c
返回分值字符串
python
r.zscore("z1","c")
返回float

3.查看元素c的排名

zrank z1 c
返回从小到大的排名,0为第一名

zrevrank z1 c
返回从大到小的排名,0为第一名
python
r.zrank("z1","c")
返回int
r.revrank("z1","c")

4.统计元素数

统计所有元素数
zcard z1

统计分数区间的元素数,默认闭区间
zcount z1 min max
开区间
zcount z1 (min (max 
python
r.zcard("z1")
返回int
r.zcount("z1",1,3) #闭区间
r.zcount("z1","(1","(3") #开区间

5.删除元素c

zrem z1 c
成功,返回1
失败,返回0
python
r.zrem("z1","c")
成功,返回1
失败,返回0

6.给元素b增加8分,然后减5分

zincrby z1 8 b
zincrby z1 -5 b
python
r.zincrby("z1",8,"b")
r.zincrby("z1",-5,"b")

7.按照分数区间删除成员

zremrangebyscore z1 min max  闭区间
zremrangebyscore z1 (min (max 开区间
python
r.zremrangebyscore("z1",5,8) #删除分数在[5,8]之间的元素
r.zremrangebyscore("z1","(5",8) #删除分数在(5,8]之间的元素

8.获取分数区间成员

zrangebyscore z1 min max  闭区间
zrangebyscore z1 (min (max 开区间
python
r.zrangebyscore("z1",5,8) #获取分数在[5,8]之间的元素
r.zrangebyscore("z1","(5",8) #获取分数在(5,8]之间的元素

9.获取分数区间成员

zrangebyscore z1 min max  闭区间
zrangebyscore z1 (min (max 开区间
zrangebyscore z1 min max withscores limit 2 2 分页
python
r.zrangebyscore("z1",5,8) #获取分数在[5,8]之间的元素,返回列表
r.zrangebyscore("z1","(5",8) #获取分数在(5,8]之间的元素,返回列表

10.并集存储

#两个集合取并集,存在destination集合
zunionstore destination 2 z1 z2
#三个集合取并集,存在destination集合
zunionstore destination 3 z1 z2 z3
如:
zadd z1 1 a 2 b 3 c
zadd z2 5 a 6 c 7 d
zunionstore z5 2 z1 z2
得到{
    
    b,a,d,c}
分数[2,6,7,9]
这里默认相同的元素,分数则求和

zunionstore z5 2 z1 z2 aggregate min
得到{
    
    a,b,c,d}
分数[1,2,3,7]
同样有取max

带权重的分数
zunionstore z5 2 z1 z2 weights 0.5 1
得到{
    
    b,a,d,c}
分数[1,5.5,7,7.5]
python
r.zunionstore("destination",("z1","z2"),aggregate="sum") 
r.zunionstore("destination",{"z1":0.5,"z2":1},aggregate="min") #带权重的集合

10.交集存储

zinterstore destination 2 z1 z2
zinterstore destination 3 z1 z2 z3 
python
r.zinterstore("dest",("z1","z2"),aggregate="sum")
r.interstore("dest",{"z1":0.5,"z2":1},aggregate="min")

有序集合的使用场景

实时排行榜

猜你喜欢

转载自blog.csdn.net/weixin_45228198/article/details/113308731