包阅导读总结
1. 缓存一致性、数据库更新、脏读、回滚操作、延时双删
2. 文本围绕缓存与数据库更新的一致性问题展开,提到更新成功或失败的不同情况及相应解决办法,如重试、过期、延时双删等,也指出存在的脏读、回滚及复杂度高等问题。
3.
– 缓存一致性问题
– 数据库更新成功缓存更新失败
– 可重试或让缓存过期保证最终一致性
– 减少数据不一致窗口期
– 更新完数据库马上更新缓存保持一致性,但更新窗口期中读操作可能脏读
– 缓存更新成功数据库更新失败
– 导致长期不一致,需回滚操作,增加复杂性
– 先删缓存再更新数据库可能导致窗口期一致性问题
– 延时双删
– 步骤为先删、更新、再延时删,可减少不一致概率
– 但增加系统复杂度,且延迟时间不易确定
思维导图:
文章地址:https://mp.weixin.qq.com/s/la8YoEHd806Ovs-k1siLLg
文章来源:mp.weixin.qq.com
作者:遇舟
发布时间:2024/6/27 6:36
语言:中文
总字数:4592字
预计阅读时间:19分钟
评分:92分
标签:缓存一致性,分布式系统,天猫国际,Push中心,数据一致性
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
-
一致性更强:如果数据库更新成功,而缓存更新失败,可以通过重试机制解决,或者直接让缓存过期,保证了最终一致性。 -
减少数据不一致的窗口期:因为更新缓存的操作通常比更新数据库快得多,所以更新完数据库后马上更新缓存,可以尽快保持它们之间的一致性。
-
更新窗口期中的读操作可能导致脏读:如果在更新数据库后、更新缓存前有新的读请求,这时会读到旧的缓存数据。
-
减少了脏读的可能:因为缓存是最先被更新的,读请求总是能读到最新的数据。
-
一致性问题更为复杂:如果缓存更新成功,但是数据库更新失败,这会导致缓存和数据库之间出现长期的不一致状态,解决这种不一致状态需要额外的回滚操作,增加了系统的复杂性。 -
需要处理回滚操作:如上所述,更新缓存成功而数据库更新失败时,需要有一套策略来回滚已经更新的缓存,确保数据一致性。
-
可能导致窗口期一致性问题。在删除成功和数据库更新期间,如果有读操作发生,将会读取到旧的数据并且可能回填到缓存中,导致数据库与缓存数据不一致。
-
相对于“先删缓存,再更新数据库”策略,这种方法可以减少由于缓存窗口期造成的不一致概率。延迟第二次删除可以覆盖到那些在数据库更新过程中请求旧缓存的读操作,从而阻止这些操作将旧数据回填到缓存。
-
增加了系统的复杂度,需要合适的机制来定时执行第二次删除操作。 -
第二次删除的延迟时间不易确定,太短可能无效,太长则可能导致长时间的数据不一致。