更新数据库后如何更新redis?

时间:2016-03-30 08:02:45

标签: database caching redis

我用redis缓存一些数据,如果存在则从redis读取数据,否则从数据库读取数据并用redis写入数据。

我发现更新数据库后有几种方法可以更新redis。例如:

  1. 将redis中的密钥设置为已过期
  2. 在更新datebase后立即更新redis。
  3. 将数据放入MQ并使用consumer来更新redis。
  4. 我有点困惑,不知道如何选择。

    你能否告诉我每种方式的优缺点,最好告诉我更新redis的其他方法或推荐一些关于这个问题的博客。

1 个答案:

答案 0 :(得分:7)

应使用您在问题中描述的第三种方法同步实际数据存储和缓存。

在向最终存储(即SQL数据库)添加数据时,需要将此数据排入某个服务总线或消息队列,并让某些异步服务使用某种后台进程完成整个同步。

您不希望遇到这种情况(不使用服务总线和异步服务时):

  • 使您的请求或进程变慢,因为用户需要等到数据都存储在数据库和缓存中。
  • 在缓存过程中存在失败的风险,并且无法获得重试策略(通常是服务总线或某些消息队列中的内置功能)。此外,此故障可能会导致部分或完全缓存损坏,您将无法自动轻松地安排某些任务来解决此问题。

关于使用Redis密钥到期,这是一个好主意。由于Redis可以使用其内置机制使密钥到期,因此您不应该在整个后台进程中实现密钥到期。如果存在密钥是因为它仍然有效。

顺便说一下,你不会总是在这种情况下(如果一个密钥没有过期,则意味着它不应该被覆盖)。它可能取决于您的实际域名。