电商设计素材网站推荐,anew wordpress,西安网络公司排名,怎么让别人看到自己做的网站订阅发布
概述
Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过执行SUBSCRIBER命令#xff0c;客户端可以订阅一个或多个频道#xff0c;从而成为这些频道的订阅者(subscribe)#xff1a; 每当有其他客户端向被订阅的频道发送消息(message)时客户端可以订阅一个或多个频道从而成为这些频道的订阅者(subscribe) 每当有其他客户端向被订阅的频道发送消息(message)时频道的所有订阅者都会收到这条消息.
除了订阅频道之外客户端还可以通过执行PSUBSCRIBE命令订阅一个或多个模式从而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时消息不仅会被发送给这个频道的所有订阅者它还会被发送给所有与这个频道相匹配的模式的订阅者
例子
举个例子。假设A、B、C三个客户端都执行了命令:
SUBSCRIBE news.it那么这三个客户端就是news.it频道的订阅者如图所示。如果这时某个客户端执行命令
PUBLISH news.it hello向news.it频道发送消息hello,那么news.it的三个订阅者都将收到这条消息如图所示.
举个例子。假设如图所示: 1.客户端A正在订阅频道news.it 2.客户端B正在订阅频道news.et 3.客户端C和客户端D正在订阅与news.it频道和news.et频道相匹配的模式news.[ie]t. 如果这时某个客户端执行命令
PUBLISH news.it hello“news.it频道发送消息hello”那么不仅正在订阅news.it频道的客户端A会受到消息客户端C和客户端D也会收到消息因为这两个客户端正在订阅匹配news.it频道的news.[ie]t模式如图所示
与此类似如果某个客户端执行命令
PUBLISH news.et world“news.et频道发送消息world”那么不仅正在订阅news.et频道的客户端B会收到消息客户端C和客户端D也同样会收到消息。因为这两个客户端正在订阅匹配news.et频道的news.[ie]t模式如图所示
Redis中的发布订阅会进行持久化吗?
在Redis中发布订阅(Pub/Sub)模式本身并不会进行消息的持久化。当消息被发布到频道时它们会被发送给当前处于订阅状态的客户端并在这些客户端中进行传递但不会被持久化到磁盘上。如果需要对消息进行持久化可以考虑以下几种方法:
1.使用Redis Streams:Redis5.0引入了Streams数据结构它提供更丰富的消息传递功能并且支持消息的持久化。可以将消息发送到RedisStreams中然后消费者可以按需读取消息并且这些消息会持久化到Redis中2.将消息存储到数据库中:在订阅者接收到消息后可以将消息存储到数据库中进行持久化。这样可以确保即使在Redis发布订阅模式中没有持久化消息的情况下仍然可以通过数据库来获取消息历史记录3.使用Redis AOF持久化:如果仍然希望使用Redis发布订阅模式并且希望对消息进行持久化可以启用Redis的AOF(Append-Only File)持久化功能。AOF记录了Redis服务器接收到的所有写命令包括发布消息到频道的命令。通过启用AOF持久化可以确保即使Redis服务器重启也不会丢失消息
综上所述Redis发布订阅模式本身并不提供消息持久化功能但可以通过其他方式来实现消息的持久化来满足需求
频道的订阅与退订。
当一个客户端执行SUBSCRIBE命令订阅某个或某些频道的时候这个客户端与被订阅频道之间建立起了一种订阅关系。Redis将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面这个字典的键是某个被订阅的频道而键的值则是一个链表链表里面记录了所有订阅这个频道的客户端:
struct redisServer {
// ...// 保存所有频道的订阅关系
dict *pubsub_channels:// ...
};例子
举个例子。如图展示了一个pubsub_channels字典示例这个字典记录了以下信息: 1.client-1、client-2、client-3三个客户端正在订阅news.it频道 2.客户端client-4正在订阅news.sport频道 3.client-5和client-6两个客户端正在订阅news.business频道