25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?

极客时间 | 《Redis核心技术与实战》学习笔记目录

原文

在实际应用 Redis 缓存时,我们经常会遇到一些异常问题,概括来说有 4 个方面:

  • 缓存中的数据和数据库中的不一致
  • 缓存雪崩
  • 缓存击穿
  • 缓存穿透

缓存和数据库的数据不一致是如何发生的?

Redis、数据库的操作不是原子操作

如何解决数据不一致问题?

重试机制

  • 可以把要删除的缓存值或者是要更新的数据库值暂存到消息队列中(例如使用 Kafka 消息队列)。当应用没有能够成功地删除缓存值或者是更新数据库值时,可以从消息队列中重新读取这些值,然后再次进行删除或更新。
  • 如果能够成功地删除或更新,我们就要把这些值从消息队列中去除,以免重复操作,此时,我们也可以保证数据库和缓存的数据一致了。否则的话,我们还需要再次进行重试。如果重试超过的一定次数,还是没有成功,我们就需要向业务层发送报错信息了。

先删除缓存,再更新数据库

  • 延迟双删

先更新数据库值,再删除缓存值

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus