Redis Streams做股票行情MQ?

redis作为内存数据库,大多时候都是作为缓存来使用,但是因为有pub/sub的存在,所以也可以做MQ来使用。做为MQ,它有两个严重的问题:
1.无法持久化;
2.没有ack机制;

redis pub/sub是一个要即时消费的MQ,如果消费晚了,数据就会丢失。因此在使用redis pub/sub作为MQ的时候,我们通常要用一个线程轮询去sub,丢到内存队列中等待处理线程去处理,这带来了消费者服务资源不必要的损耗。

可能是为了解决这些问题吧,redis5.0增加一个新的数据类型Streams,这个数据类型的特点和kafka非常类似。

Redis Streams 有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

在这里插入图片描述

图中:

Consumer Group :消费组,使用 XGROUP CREATE 命令创建,一个消费组有多个消费者(Consumer)。

last_delivered_id :游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。

pending_ids :消费者(Consumer)的状态变量,作用是维护消费者的未确认的 id。pending_ids 记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符)。

我们对比下kafka的结构图。
图片
对比可以发现,redis streams和kafka都有消费组,都有游标,也都有ack,可以说这些特性都是从kafka那边借鉴来的。但是,redis streams没有分区的概念,如果想实现类似分区的功能,就要在客户端使用一定的策略将消息写到不同的 Stream。

从存储介质角度看,redis streams是通过内存来实现发布订阅功能的,它的读写效率应该更高。kafka是利用磁盘来存储的,通过零拷贝的方式实现快速读写,使用分批写入的方式提高效率,提高了吞吐量却加大了响应时间。但是绝大多数情况下还是能够满足各种使用场景的。

金融公司接收交易所发送的实时行情各有各的方式,有的用kafka,有的用pulsar,现在是不是也可以用redis这种更轻量级更快速的中间件来处理了呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值