Java互联网架构-基于分布式Redis如何发布数据与订阅机制?(异步redis订阅怎么实现)

Java互联网架构-基于分布式Redis如何发布数据与订阅机制?

事实上,redis生来就不是干消息发布与订阅这件事的,一开始只是用做内存缓存,后来才被开发出全局唯一ID,分布式锁,消息队列这些功能!

Java互联网架构-基于分布式Redis如何发布数据与订阅机制?(异步redis订阅怎么实现)
(图片来源网络,侵删)

在我们一开始没用成熟的消息中间件(mq,ons,kafka)的时候,就用了redis作为消息的发布订阅机制!

redis作为一个内存数据库,所有的数据都在内存中进行操作,只提供通过异步的方式(AOF或者RDB)进行数据的持久化,在重启的时候,从文件中把数据加载到内存,所以redis速度非常快!

redis发布订阅的原理又是啥?

Java互联网架构-基于分布式Redis如何发布数据与订阅机制?(异步redis订阅怎么实现)
(图片来源网络,侵删)

redis通常分为client端(一般为多个)和server端,一个客户端(发布者)通过发送消息到channel中,redis server中会维护一份pubsub_channels字典,以channel为key,所有的channel订阅者组成的链表为value,在消息发布的时候,server会使用channel取出所有的订阅者进行遍历,然后把消息发布给所有订阅者!(为什么使用链表结构?在订阅者频繁变动的时候,链表的修改时间复杂度为O(1))!

redis作为消息发布订阅具体有什么操作呢?

1,发布者:消息的发布者通过redis的指令publish生产消息,这个指令会返回相应的值,表明消息订阅者数量!

Java互联网架构-基于分布式Redis如何发布数据与订阅机制?(异步redis订阅怎么实现)
(图片来源网络,侵删)

2,订阅:消息的消费者通过subscribe指令订阅频道(可多个),这个指令会返回订阅的频道,数量,和消费的消息!

3,模糊匹配:类似于sql中的*,redis使用psubscribe指令订阅模糊的符合某个条件的所有频道!

4,取消订阅:订阅者通过unsubscribe命令取消某个频道的订阅,也会有相应的返回值!

它是通长连接收消息的,在极端的情况下会丢失消息,如在服务器写消息的时候,订阅方突然断开,那么这条消息就会永久丢失。如果仅是满足一般的消息驱动,是一个比较轻量的选择,并且也可以做到广播和单播两种形式。如果肯下点功夫,基于消息驱动的分布式事务也不是没有可能。

php redis做mysql的缓存,怎么异步redis同步到mysql数据库?

redis是内存型数据库,mysql是硬盘型数据库,需要长久保存的就存mysql,不需要长期保存切频繁更新的就存redis,他们之间不需要同步!不然就是多此一举,性能反而更差!

到此,以上就是小编对于异步redis订阅怎么实现的的问题就介绍到这了,希望这2点解答对大家有用。