分享

别再用 Redis List 实现消息队列了,Stream 专为队列而生!

 昵称10087950 2022-06-16 发布于江苏

上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如:

  • 没有良好的 ACK 机制;
  • 没有 ConsumerGroup 消费组概念;
  • 消息堆积。
  • List 是线性结构,想要查询指定数据需要遍历整个列表;

Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据 ID 的大小进行有序排列。

它实现了大部分消息队列的功能:

  • 消息 ID 系列化生成;
  • 消息遍历;
  • 消息的阻塞和非阻塞读;
  • Consumer Groups 消费组;
  • ACK 确认机制。
  • 支持多播。

提供了很多消息队列操作命令,并且借鉴 Kafka 的 Consumer Groups 的概念,提供了消费组功能。

同时提供了消息的持久化和主从复制机制,客户端可以访问任何时刻的数据,并且能记住每一个客户端的访问位置,从而保证消息不丢失。

废话少说,先来看下如何使用,官网文档详见:https:///topics/streams-intro

XADD:插入消息

「云岚宗众弟子听命,击杀萧炎!」

当云山最后一字落下,那弥漫的紧绷气氛,顿时宣告破碎,悬浮半空的众多云岚宗长老背后双翼一振,便是咻咻的划过天际,追杀萧炎。

云山使用以下指令向队列中插入「追杀萧炎」命令,让长老带领子弟去执行。

XADD 云岚宗 * task kill name 萧炎
"1645936602161-0"

Stream 中的每个元素由键值对的形式组成,不同元素可以包含不同数量的键值对

该命令的语法如下:

XADD streamName id field value [field value ...]

消息队列名称后面的 「*」 ,表示让 Redis 为插入的消息自动生成唯一 ID,当然也可以自己定义。

消息 ID 由两部分组成:

    <>
<>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多