【大数据】Redis的发布订阅模式的理解

93 阅读2分钟

image.png

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情


前言

之前的文章中,描述了Redis的基本特点和安装方式,以及hyperloglog的简介和基本应用场景,项目中需要使用hyperloglog作为数据去重的组成部分,利用的正是其基数算法,除了保证进入redis的数据是唯一的情况下,还需要将采集到的消息发布出去,因此还需要使用到redis的发布订阅模式。

什么是发布订阅模式

Redis除了常规的键值对存储方式之外,还有一种类似于消息推送的模式,简单说就是程序A向redis发送一条消息,而程序B如果订阅了这个消息,那么就能接收到客户端A所发送的消息,诶~,巧了,Kafka不也是干这么个事儿的吗,但是对比一下还是有区别的,如下:

  • 存储介质不同,redis的数据存储于内存中,而Kafka数据持久化在硬盘里面
  • 性能不同,因为时间复杂度都在IO操作上,性能来讲redis理应优于kafka,但是实际使用的时候可能需要根据实际情况审视。
  • 成本问题,还是存储介质的要求,redis存储与内存中,成本远大于存储于硬盘的kafka。
  • 数据安全,redis由于服务器宕机或者断电,会存在数据丢失的风险,相对于硬盘不稳定性较大
  • 数据持久化,redis并不会做数据持久化,因此一个新的消费者订阅topic的话,之前的数据是拿不到的

消息发布模式

image.png

image.png

由上图所示,消息发布模式例如有一个channel,分别有三个订阅者,当消息发布者发布消息之后,三个接受者均会接受到消息。

消息发布订阅命令

订阅频道

subscribe {channel} {channel} ...

发布消息

publish {channel} {message}

取消订阅

unsubscribe {channel} {channel} ...

按照模式订阅

psubscribe {pattern} 

按照模式取消订阅

punsubscribe {pattern} 

测试

test1.PNG

test2.PNG