干货 | Redis 实现发布订阅原理与实践

写在前面

Redis 是完全开源的,高性能的 key-value 数据库,受到越来越多的业务场景应用。对于"发布/订阅"的消息模式,大家也许都比较了解,但是其实现原理及应用是否还存在模糊呢?

今天计划同大家一起,深入浅出讲透 Redis 发布订阅,尽量通俗易懂,让大家轻松上手。

发布/订阅模式

关于发布/订阅模式

在软件架构中,发布/订阅是一种消息模式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者),而是通过消息通道广播出去,让订阅该消息主题的订阅者消费到。

干货 | Redis 实现发布订阅原理与实践_第1张图片

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分:发布者(Publisher),订阅者(Subscriber)和频道(Channel)。发布/订阅者模式最大的特点就是实现了松耦合。

Redis发布订阅分类

  • 频道的发布订阅

  • 模式的发布订阅

下面来分别详细阐述一下其实现原理及应用。

频道的发布订阅

实现原理

Redis将所有频道的订阅关系都保存在服务器状态的 pubsub_channels 字典,字典的键是某个被订阅的频道,而对应值则是一个链表,链表里记录了所有订阅这个频道的客户端。

struct redisServer{
      //...
    // 保存所有频道订阅关系    dict *pubsub_channels;        //...}

一个pubsub_channels字典示例如下:

干货 | Redis 实现发布订阅原理与实践_第2张图片

  • client-1、client-2、client-3 三个客户端正在订阅 “article.tech” 频道

  • 客户端 client-4 正在订阅 “article.mysql” 频道

  • client-5、client-6 两个客户端正在订阅 “article.redis” 频道

订阅频道

相关命令:

SUBSCRIBE channel [channel …]

当客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,这个客户端与被订阅频道之间就建立起了一种订阅关系。

建立订阅关系执行分两种情况:

1&

你可能感兴趣的:(redis,java,开发语言,面试,后端)