持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
前言
之前的文章中,描述了Redis的基本特点和安装方式,以及hyperloglog的简介和基本应用场景,项目中需要使用hyperloglog作为数据去重的组成部分,利用的正是其基数算法,除了保证进入redis的数据是唯一的情况下,还需要将采集到的消息发布出去,因此还需要使用到redis的发布订阅模式。
什么是发布订阅模式
Redis除了常规的键值对存储方式之外,还有一种类似于消息推送的模式,简单说就是程序A向redis发送一条消息,而程序B如果订阅了这个消息,那么就能接收到客户端A所发送的消息,诶~,巧了,Kafka不也是干这么个事儿的吗,但是对比一下还是有区别的,如下:
- 存储介质不同,redis的数据存储于内存中,而Kafka数据持久化在硬盘里面
- 性能不同,因为时间复杂度都在IO操作上,性能来讲redis理应优于kafka,但是实际使用的时候可能需要根据实际情况审视。
- 成本问题,还是存储介质的要求,redis存储与内存中,成本远大于存储于硬盘的kafka。
- 数据安全,redis由于服务器宕机或者断电,会存在数据丢失的风险,相对于硬盘不稳定性较大
- 数据持久化,redis并不会做数据持久化,因此一个新的消费者订阅topic的话,之前的数据是拿不到的
消息发布模式
由上图所示,消息发布模式例如有一个channel,分别有三个订阅者,当消息发布者发布消息之后,三个接受者均会接受到消息。
消息发布订阅命令
订阅频道
subscribe {channel} {channel} ...
发布消息
publish {channel} {message}
取消订阅
unsubscribe {channel} {channel} ...
按照模式订阅
psubscribe {pattern}
按照模式取消订阅
punsubscribe {pattern}