我将一些数据缓存在redis中,如果存在则从redis中读取数据,否则从数据库中读取数据并将数据写入redis中。
我发现更新数据库后更新redis有几种方法。例如:
- 将redis中的key设置为过期
- 更新数据库后立即更新redis。
- 将数据放入MQ并使用consumer更新redis。
我有点迷茫,不知道如何选择。
你能告诉我每种方法的优点和缺点吗?最好告诉我其他更新redis的方法或者推荐一些关于这个问题的博客。
实际的数据存储和缓存应使用您在问题中描述的第三种方法进行同步。
当您将数据添加到最终存储(即 SQL 数据库)时,您需要将此数据排入某个服务总线或消息队列,并让某个异步服务使用某种后台进程来完成整个同步。
您不想陷入这种情况(当不使用服务总线和异步服务时):
- 使您的请求或处理速度变慢,因为用户需要等待数据同时存储在数据库和缓存中。
- 在缓存过程中存在失败的风险,并且无法具有重试策略(这通常是服务总线或某些消息队列中的内置功能)。此外,此故障可能最终导致部分或完全缓存损坏,并且您将无法自动轻松地安排某些任务来修复这种情况。
关于使用 Redis 密钥过期,这是一个好主意。由于 Redis 可以使用其内置机制使密钥过期,因此您不应该在整个后台进程中实现密钥过期。如果密钥存在,是因为它仍然有效。
顺便说一句,您不会总是遇到这种情况(如果密钥没有过期,则意味着它不应该被覆盖)。这可能取决于您的实际域。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)