1.pub/sub
publish与subscribe用于消息的发布和订阅
订阅者需先订阅该channel,然后发布者再发布消息。puslish命令的返回值为订阅者数量。
psubscribe可以支持通配符:
psubscribe sport* #可以订阅所有sport开头的channel
2.stream
stream也是redis的消息队列,但它可以实现消息持久化,可以主从复制,可以记录消费者的消费位置,也就是说它更像kafka。
stream结构示意图:
stream的几个关键概念
- Consumer Group
消费者组名,类似kafka中的消费者组。 不同组之间互不影响。 - Last_delivered_id
类似kafka中的游标 - Pending ids
维护消费者未被确认的消息,也就是还未被ACK的id - 消息id格式
XADD生成的1553439850328-0,就是Redis生成的消息ID,由两部分组成:时间戳-序号。时间戳是毫秒级单位,是生成消息的Redis服务器时间,它是个64位整型(int64)。序号是在这个毫秒时间点内的消息序号,它也是个64位整型
消息队列相关命令
- XADD 添加消息到队列尾部
- XTRIM 对流进行修建,限制长度
- XDEL 删除消息
- XLEN 获取流包含的元素数量
- XRANGE 获取消息列表
- XREVRANGE 反向获取消息列表
- XREAD 以阻塞或者非阻塞方式获取消息列表
消费者组相关命令
- XGROUP CREATE 创建消费者组
- XREADGROUP GROUP 读取消费者组中的消息
- XACK 将消息标记为已处理
- XGROUP SETID 为消费者组设置新的最后递送消息ID
- XGROUP DELCONSUMER 删除消费者
- XGROUP DESTROY 删除消费者组
- XPENDING 显示待处理消息的相关信息
- XCLAIM 转移消息的归属权
- XINFO 查看流和消费者组的相关信息
- XINFO GROUPS 打印消费者组的信息
- XINFO STREAM 打印流信息
stream的命令完整演示说明:《基于Redis的Stream类型的完美消息队列解决方案》