redis-zset

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

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

zadd key score member 添加编码

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

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

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

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

incr: 对score作增长,至关于后面介绍的zincrby队列

常规操做:ip

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的读写效率会降低

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

相关文章
相关标签/搜索