课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存问题是程序员在开发软件或者是设计网页的时候需要重点关注的一个问题,而今天我们就通过案例分析来了解一下,常见的缓存异常问题都有哪些类型。
缓存和数据库的数据不一致
缓存和数据库的数据一致性包含两种情况:
缓存中有数据,缓存的数据值需要和数据库中的值相同;
缓存中没有数据,数据库中的值必须是新值。
数据不一致是如何发生的?
在1讲中关于缓存的类型那节,介绍了缓存有两种不同类型,分别是只读缓存和读写缓存。不同类型的缓存数据不一致的发生情况不一样,应对方法也不一样。
读写缓存:有两种写回策略,同步直写和异步写回。如果要保证数据一致,就要采用同步直写策略。但需要保证缓存和数据库的更新具有原子性,即要么都成功,要么都失败。
只读缓存:分新增数据和删改数据两种情况说明。
新增数据
数据直接写到数据库中,不对缓存做任何操作,符合一致性的2种情况。
删改数据
发生删改操作时,既要更新数据库,也要在缓存里删除数据。因为缓存和数据库是不同的系统,这里分两种情况:
先删除缓存,再更新数据库:数据库更新失败,导致请求再次访问缓存时,发现缓存失败,再读数据库时,从数据库中读取旧值。
先更新数据库,再删除缓存:缓存删除失败,导致请求再次访问缓存时,发现缓存命中,并从缓存中读取到旧值。
如何解决数据不一致?
使用重试机制,指把删除的缓存值或者是要更新的数据库值暂存到消息队列中(例如使用Kafka消息队列)。
当应用没有能够成功地删除缓存值或者是更新数据库值时,从消息队列中重新读取这些值,然后再次进行删除或更新。
如果成功删除,就从消息队列中删除,以免重复操作。否则就要进行重试,如果重试超过一定次数,就要向业务层发送报错信息。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。