我在redis中缓存一些数据,如果存在则从redis中读取数据,否则从数据库中读取数据并将数据写入redis。
我发现更新数据库后更新redis有几种方法,例如:
- 将redis中的键设置为过期
- 更新数据库后立即更新redis。
- 将数据放入MQ,使用consumer更新redis。
有点迷茫,不知道如何选择。
你能告诉我每种方式的优点和缺点吗,最好告诉我其他更新redis的方法或者推荐一些关于这个问题的博客。
最佳答案
实际数据存储和缓存应该使用您已经在问题中描述的第三种方法进行同步。
当您将数据添加到您的最终存储(即您的 SQL 数据库)时,您需要将这些数据排入某个服务总线或消息队列,并让一些异步服务使用某种后台进程完成整个同步。
你不想陷入这种情况(当不使用服务总线和异步服务时):
- 让您的请求或处理变慢,因为用户需要等到数据同时存储在您的数据库和缓存中。
- 在缓存过程中有失败的风险,并且无法使用重试策略(这通常是服务总线或某些消息队列中的内置功能)。此外,此故障可能会导致缓存部分或全部损坏,您将无法自动轻松地安排一些任务来修复这种情况。
关于使用 Redis 键过期,这是个好主意。由于 Redis 可以使用其内置机制使 key 过期,因此您不应在整个后台进程中实现 key 过期。如果 key 存在是因为它仍然有效。
顺便说一句,您不会总是遇到这种情况(如果 key 没有过期则意味着它不应该被覆盖)。这可能取决于您的实际域。
关于database - 更新数据库后如何更新redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302972/