0

我有四个连接到 redis 的服务器。当redis服务器宕机又起来的时候。我想清除redis数据库。问题是所有服务器都在触发清除操作。如何处理使得只有一个服务器触发清除并通知所有其他服务器。我使用 StackExchange.Redis 和 CacheManager.Net 包作为 redis 客户端库

4

1 回答 1

0

要禁用任何保存,请设置appendonly no

并评论或删除任何save

#save 900 1

如果您不想禁用 Redis 保存数据,更一般地说,您必须以某种方式同步通信,这并不容易,因为这是一个分布式系统。

在清除缓存之前,您可以Add使用 CacheManager 尝试使用假密钥。只有一个客户端能够写入密钥,False如果密钥已经存在,则 Add 方法返回。这意味着,只有第一个客户端会写入“锁”,然后该客户端会执行Clear.

但是,这仅在客户端尝试添加项目时未执行 FLUSH 时才有效(因为 FLUSH 也会删除该密钥......)

要同步该操作,您可以在清除缓存之前等待几秒钟。或者,您将另一个 Redis 数据库用于该“锁定”机制。

另一种选择可能是使用 CacheManager 的背板。清除会触发一个事件,该事件会传播到所有连接的客户端。您可以使用它来测试另一个客户端是否刚刚清除了缓存。但是,由于延迟和网络延迟,这也不是 100% 可靠的。

于 2017-05-17T23:33:45.517 回答