Redis 多消费队列方案
发布网友
发布时间:2022-11-27 13:34
我来回答
共1个回答
热心网友
时间:2023-10-16 21:27
首先在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消息队列方案介绍