【问题标题】:Cache invalidation and cache server restart缓存失效和缓存服务器重启
【发布时间】:2013-11-26 00:16:39
【问题描述】:

我的应用程序对缓存服务器重启具有弹性(嗯,希望如此,但没关系)。这意味着,如果缓存(Redis,在主/从集群配置中)变得不可用(例如,整个集群变得不可用),应用程序可以通过关闭大量缓存的特性来优雅地降级,并且仍然可以缓慢地工作。

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

在我需要在整个集群关闭时发送缓存失效消息之前,上述方法非常有效。流程是这样的:

  1. 缓存正常
  2. 应用服务器将数据 X=Y 放入缓存。 X=Y 被保存到缓存文件系统中。
  3. 缓存失败,重新启动。
  4. 应用服务器获取命令将 X 操作为 Y' - 想要发送 X 的缓存失效。失败 - 缓存没有响应(仍然关闭)。由于缓存是可选的,因此应用服务器会记录并继续。
  5. 缓存恢复 - 从文件系统加载数据,包括 X=Y
  6. 应用服务器收到服务 X 的请求 - 进入缓存并查看之前的数据 X=Y。即使数据库有 Y',Y 仍在服务中。问题。愤怒的客户。

如何解决这个问题 - 特别是在具有主/从方案的 Redis 中(从站当前仅用于更快的故障转移)。

【问题讨论】:

  • 你能详细说明一下吗:“我必须将状态保存到文件系统中,以便主从同步更加高效”
  • 我可能弄错了。我假设对于主从同步,必须保存 RDB 文件。此 RDB 文件是否不用于重新启动?另外,如果我禁用它,当新的从站连接时这意味着什么?服务器会减慢创建快照的速度吗?

标签: caching redis failover


【解决方案1】:

既然我们在这里谈论缓存,我会推荐这两种方法:

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

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2019-02-25
    • 2012-08-20
    • 2013-01-23
    相关资源
    最近更新 更多