Redis总结(拓展篇)
1. Stream
- 概述
Stream是Redis5.0新增数据结构
Stream是一个新的强大的支持多播的可持久化的消息队列
首次使用xadd指令时,自动创建
每个Stream都支持多个消费组,每个消费组会有一个游标last_delivered_id在Stream数组上往前移动
同一个消费组可以挂多个消费者,消费者之间是竞争关系
消费者内部会记录一个状态变量pending_ids,官方称之为PEL。用来确保客户端至少消费了一次
消息id形式是timestampInmMilis-sequence
消息内容:就是各种k-v数据结构
- 指令
xadd:追加消息
xdel:从Stream中删除消息,但是只是标志删除,不影响消息总长度
xrange:获取消息列表,自动过滤已删除的消息
xlen:获取Stream长度,会统计已删除消息
del删除整个Stream
- 消费方式
消费者读到一个消息,相应的消息ID就会加入消费者的PEL结构,客户端处理完毕使用xack指令通知服务器,告知本条消息已处理完毕,ID会从PEL中移除
- Stream消息过多
Redis支持设置Stream设置最大长度,可以将老消息干掉,确保链表不会超过最大长度
- PEL原理
对于每一个Stream,服务端为每一个消费组维护一个PEL,如果客户端消费的时候异常,再次链接的时候,可以获取到PEL信息,重新消费,保证每一个消息至少消费一次
- Stream的高可用
在集群环境下,Stream是高可用的。但是由于持久化是异步的,宕机可能导致小部分数据丢失
- 分区partition
redis是不支持分区的,要想支持,客户端需要分配多个Stream,并设置不同名称,通过hash取模决定往哪塞
2. 再谈分布式锁
- 概述
在Redis的应用-分布式锁中,在集群环境下是不安全的
- 开源Redlock算法
加锁时,会向过半节点发送加锁指令,只要过半节点加锁成功,就认为获取锁成功
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
涵盖各大厂考官最爱问知识点,22年最新整理!