5

我有一个非常困扰我的问题。Redis 发布/订阅功能实际用于什么?我只能想到通过 TCP(本地或分布式)进行的进程间通信,但其他的不多。

有人可以证明我错了。

4

2 回答 2

7

这是一种插入事件流的简单方法,通常在进程或机器之间。例如,用户创建一个已发布的事件。一个进程处理从事件更新数据库,另一个更新用户统计信息,另一个全局统计信息,另一个更新文本搜索数据库等。它们都通过订阅频道而松散耦合。您可以添加新进程来测试更新和监控系统。它与消息队列有点不同,因为在消息被处理之前没有存储消息,但 Redis 有其他结构用于这些类型的作业。

于 2012-07-05T00:31:50.687 回答
2

根据我的经验,一个真实的用例。假设您有一个 Web 应用程序部署在 4 个不同的服务器(节点、虚拟机)上,主要是在您的虚拟私有云上。

Web 应用程序为其静态数据缓存维护一个内存中的 Java 映射,该缓存偶尔会发生变化。

现在,每次数据库中的数据发生变化时,您都需要所有服务器在内存缓存中进行更新,这就是问题所在。

一种方法是在单独的服务器上维护 redis 或任何其他缓存中的所有静态数据,并根据调度程序更新缓存。但是在这里要访问偶尔更改的静态内容,您需要调度程序和单独的缓存服务器,如 redis 或memcached 等,每个服务器都指向这个外部缓存。

在这里使用redis的pubsub:所有服务器都订阅redis频道,如果redis在有更新时发布消息,添加,删除数据作为消息发送给所有订阅者。接收消息对象及其更新类型(添加,删除,更新)每个服务器更新其内存静态数据映射。

于 2017-11-11T17:54:48.460 回答