redis-zset

zset 有序集合,不能重复,给每个元素设置一个分数(score)作为排序的依据

延时队列可以通过 Redis 的 zset(有序列表) 来实现。我们将消息序列化成一个字符串作为 zset 的value,这个消息的到期处理时间作为score,然后用多个线程轮询 zset 获取到期的任务进行处理,多个线程是为了保障可用性,万一挂了一个线程还有其它线程可以继续处理。因为有多个线程,所以需要考虑并发争抢任务,确保任务不能被多次执行。

zadd key score member 添加

redis 3.2为zadd 添加了nx,xx,ch,incr:

nx:member必须不存在,才能设置成功,用于添加

xx: member必须不存在,才能设置成功,用于更新

ch:返回此次操作后,有序集合元素和分数发生变化的个数

incr: 对score做增加,相当于后面介绍的zincrby

常规操作:

zcard key : 计算成员的个数

zrank key member : 计算成员的排名(顺序)

zrevrank key member:计算成员的排名(倒序)

zrange(zrevrang) key start end :返回指定排名范围的成员

zrangebyscore(zrevrangebyscore) key min max:返回分数范围的成员(-inf 无限小 +inf 无限大)

zcount key min max :返回指定分数范围成员个数

zremrangebyscore key min max : 删除指定分数范围的成员

集合操作:

zinterstore destination numkeys key :交集 weight 每个键的权重,在做交集计算上,每个元素相乘这个权重,默认为1

zunionstore destination numkeys key :并集

内部编码:

ziplist(压缩列表):元素个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素值小于zset-max-ziplist-value配置(默认64字节),ziplist 可以有效减少内存的使用

skiplist(跳跃表):当ziplist条件不满足时。ziplist的读写效率会下降

使用场景:排行榜系统,添加用户赞数(某种操作)

 

转载于:https://my.oschina.net/u/3098425/blog/2354163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值