【问题标题】:How to Handle Multiple servers trying to clear the redis Database如何处理多个服务器试图清除redis数据库
【发布时间】:2017-05-18 16:05:55
【问题描述】:

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

【问题讨论】:

  • 为什么不将 Redis 配置为不将数据保存在磁盘上?在这种情况下,Redis 将使用空数据集重新启动。
  • 我试过了,由于某种原因,redis 总是持久化到磁盘上。
  • 您应该禁用 RDB 和 AOF persistence。详情请查看redis.conf
  • 我尝试在我的配置文件中写了“appendonly no”,即使它正在写入磁盘
  • 配置中有save <seconds> <changes>吗?您可能还需要删除或评论这些内容

标签: redis stackexchange.redis cachemanager


【解决方案1】:

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

评论或删除任何save

#save 900 1

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

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

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

要同步该操作,您可以等待几秒钟,然后再清除缓存。或者,您为该“锁定”机制使用另一个 Redis 数据库。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 2012-02-12
    • 2014-08-18
    • 1970-01-01
    • 2012-03-11
    • 2023-03-05
    • 2011-08-10
    • 2012-09-17
    相关资源
    最近更新 更多