缓存失效和缓存服务器重启

时间:2013-11-13 11:51:02

标签: caching redis failover

我的应用程序对缓存服务器重新启动具有弹性(好吧,希望如此,但没关系)。这意味着如果缓存(Redis,在主/从群集配置中)变得不可用(例如整个群集变得不可用),应用程序可以通过关闭缓存密集的功能并且仍然可以正常工作 - 缓慢地降级。

由于我在主/从模式下使用Redis,我必须将状态保存到文件系统,以便主从同步甚至可以远程高效。这意味着当服务器重新启动时,它会加载它从上一个版本中看到的数据。

以上工作非常有效,直到我需要在整个群集关闭时发送缓存失效消息。流程是这样的:

  1. 缓存正常
  2. App server将数据X = Y放入缓存中。 X = Y保存到缓存文件系统。
  3. 缓存失败,重新启动。
  4. App服务器获取操作X为Y'的命令 - 想要为X发送缓存失效。失败 - 缓存没有响应(仍然向下)。由于缓存是可选的,因此应用服务器会记录并继续。
  5. 缓存重新启动 - 从文件系统加载数据,包括X = Y
  6. App服务器获取服务X的请求 - 进入缓存并查看先前的数据X = Y.即使数据库有Y',也会提供Y.问题。愤怒的客户。
  7. 如何解决这个问题 - 特别是在具有主/从方案的Redis中(从站目前仅用于更快的故障转移)。

1 个答案:

答案 0 :(得分:0)

由于我们在这里谈论缓存,我建议采用这两种方法:

  • 跳过RDB,你不需要复制才能正常工作
  • 当redis和您的应用无法通信(例如网络分割)时,不再在redis上刷新缓存