stream简介
append-only mode
数据结构为一个前缀树加listpack,listpack的介绍详见 [Redis的一个历史bug及其后续改进]一文.
前缀树中保存的为ID,ID由两部分组成,毫秒级时间戳+该ms内的递增计数.stream结构可以理解为如下三种模式:
- 一个sorted set,score是时间,member是一个hash,时间序列存储,可以按时间范围遍历
- 阻塞模式下,类似一个日志系统,可以按tail -f 查看日志
- 一个pub/sub模式的消息队列,但是可以将消息分区之后pub给消费组中的不同消费者(负载均衡);会保存数据,不像pub/sub,推送之后就删除了.
stream实现
xadd
1 | 增加条目,并且指定最大条目数.至少保存1000条,当listpack可以回收时才会释放多余的条目 |
xdel
1 | 删除指定的stream item.也会等待listpack可以回收时真实释放 |
xrange
1 | xrange key start end count N |
xrevrange
1 | 查看最后一条数据 |
xread
1 | 读取mystream/otherstream中id大于max-id1/max-id2的entry |
xgroup
1 | group的增删改查 |
xreadgroup
1 | 消费信息 |
xack
1 | 确认已经消费了某条信息 |
xpending
1 | 显示出mystream中mygroup消费组pending的消息 |
xclaim
1 | 将大于idle-time并且指定id的entry重新分配给consumer.分配完后idle time会重新计算 |
xinfo
1 | 查看mystream相关的信息 |
xtrim
1 | 修改mystream的最大保存节点个数为10 |
stream其他
- dead letter:根据投递次数,如果投递次数大于某个值可以认为该消息不需要继续处理,可以放入其他的stream中
- xadd 中可以指定maxlen,指明stream中保存的最大条目个数