Login
网站首页 > 文章中心 > 其它

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

作者:小编 更新时间:2023-08-09 13:37:44 浏览量:407人看过

第一段:背景

在高并发场景中,为防止大量请求直接访问数据库,缓解数据库压力,常用的方式一般会增加缓存层起到缓冲作用,减少数据库压力.引入缓存,就会涉及到缓存与数据库中数据如何保持一致性问题,本文将对几种缓存与数据库保证数据一致性的使用方式进行分析.为保证高并发性能,以下分析场景不考虑执行的原子性及加锁等强一致性要求的场景,仅追求最终一致性.

第二段:读取过程

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题-图1

读缓存

如果缓存里没有值,那就读取数据库的值

同时把这个值写进缓存中

第三段:更新过程

更新操作有多种策略,各有优劣,主要针对此场景进行分析

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

问题:

①如果更新db成功,删缓存失败,将导致数据不一致

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

①并发更新场景下,更新缓存会导致数据不一致

此种方式不推荐

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

同上,不推荐

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

先删缓存,虽然解决了策略1中,后删缓存如果失败的场景,但也会发生不一致的问题

例如:请求 A 删除缓存,这时请求B来查,就会击穿到数据库,B读取到旧的值后写入缓存,A正常更新db,由于时间差导致数据不一致的情况

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

该策略针对策略1中后删缓存失败的场景,前置一层缓存数据过期时间(具体时间根据自身系统本身评估,如可覆盖db读写耗时或一致性容忍度等),更新db后就算删缓存失败,在expire时间后也能保证缓存中无数据.同时,前置expire失败,或者更新db失败,都不会影响数据一致.

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

本策略中步骤1为expire缓存,不会发生击穿缓存到数据库的情况,数据将直接返回.除非更极端情况,如下图:

expire时间没有覆盖住更新db的耗时,类似策略1中极端场景,此处不赘述

缓存与数据库双写一致性几种策略分析_缓存和数据库双写一致性问题

第四段:总结

对于每种方案策略,各有利弊,但一致性问题始终存在(文章开头排除了原子性和锁),只是发生的几率在一点点慢慢变小了,方案的评估不仅要根据自身系统的业务场景,如读写比、并发量、一致性容忍度,还要考虑系统复杂度,投入产出比等,寻找最合适的方案.

以上就是土嘎嘎小编为大家整理的缓存与数据库双写一致性几种策略分析相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章