如何处理尝试清除redis数据库的多个服务器

时间:2017-05-17 17:33:55

标签: redis stackexchange.redis cachemanager

我有四个Severs连接到redis。当redis服务器出现故障并启动时。我想清除redis数据库。问题是所有服务器都触发了清除操作。如何处理这样只有一个服务器触发清除并通知所有其他服务器。 我使用StackExchange.Redis和CacheManager.Net包作为redis客户端库

1 个答案:

答案 0 :(得分:0)

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

并评论或删除任何save

#save 900 1

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

在清除缓存之前,您可以使用CacheManager尝试Add假密钥。只有一个客户端能够写入密钥,并且Add方法返回False以防密钥已存在。意思是,只有第一个客户端会写“锁”,然后客户端执行Clear

但是,只有在客户端尝试添加项目时才会执行FLUSH,因为FLUSH也会删除该键,因此只会执行FLUSH。

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

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