Redis 多消费队列方案

首先在Redis-cli中使用XADD命令插入一条数据

查看对象编码

可以看到对象的数据类型为stream,返回的streamID 的基本结构为 "{timestamp}-{sequence}"
使用XINFO命令查看该 stream Key 的基本信息

可以看到stream中使用了一种 "radix-tree" 数据结构。

Radix树对上述单词的存储

当插入first时

相比于普通的字典树,Radix树会将单节点树枝压缩为一个节点,以节省存储空间,提高搜索的效率。在Streams结构中,默认生成的StreamID为 时间戳+自增序列号 的形式,当消息的时间分布紧凑时,这种存储结构多个StreamID复用的前缀将很长,可以将存储空间压缩得很小,这对于内存使用内存存储数据的Redis很重要。Radix树的另一个优点是解决了hash冲突的问题。对于一般的hash结构,当遇到hash冲突的情况,一般采用链地址法的方式解决冲突。这样一个hash槽中的链可能会很长,如果采用扩容的方式,执行效率一般也不是很高。采用树结构索引数据解决了hash冲突的问题。当然,Radix树在遇到新插入的数据时也会遇到数据节点拆分的问题。

stream 是一种 append-only 的数据结构,只有 del 命令可以删除对应的Key。

指定添加数据的最大长度(~表示只在节点删除时清除数据,能保证数据个数的最大长度不小于 LENGTH 个,不需要每次调整Radix树,性能相对较好)

阻塞式,获取最新1条的数据(阻塞单位:ms)

根据Streams支持的命令,要使用Streams作为多消费队列,主要有以下几点:

官网介绍
中文官网命令介绍
图解Redis数据结构,讲的比较好
知乎上基于Redis消息队列方案介绍

扩展阅读:redis缺点及解决方案 ... redis 排行榜怎么做的 ... redis如何实现延时队列 ... redis雪崩解决方案 ... redis做延迟队列靠谱吗 ... redis击穿解决方案 ... php redis队列实现秒杀 ... redis list ... redis队列实现秒杀java ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网