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

men*_*.ye 11 database caching redis

我在redis中缓存一些数据,如果存在则从redis读取数据,否则从数据库读取数据并以redis形式写入数据.

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

  1. 将redis中的密钥设置为已过期
  2. 更新datebase后立即更新redis.
  3. 将数据放入MQ并使用consumer来更新redis.

我有点困惑,不知道如何选择.

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

Mat*_*zer 9

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

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

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

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

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

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