缓存可以提升性能,缓解数据库压力,但是同时缓存也会出现「缓存和数据库数据不一致」的问题。当客户端发送一个数据修改的请求,我们不仅要修改数据库,还要一并操作(修改/删除)缓存。对数据库和缓存的操作又存在一个顺序的问题:到底是先操作数据库还是先操作缓存。
一、缓存的作用
大部分面向公众的互联网系统,其并发请求数量与在线用户数量都是正相关的,而 MySQL 能够承担的并发读写量是有一定上限的,当系统的访问量超过一定程度的时候,纯 MySQL 就很难应付了。绝大多数互联网系统都是采用 MySQL+Redis 这对经典组合来解决高并发问题的。
Redis 作为 MySQL 的前置缓存,可以应对绝大部分查询请求,从而在很大程度上缓解 MySQL 并发请求的压力。
缓存可以提升性能,缓解数据库压力,但是同时缓存也会出现「缓存和数据库数据不一致」的问题。如果数据不一致,就会导致应用在缓存中读取的不是最新的数据,这显然是不能接受的。
二、缓存和数据库双写不一致,怎么解决
1、先更新缓存,再更新 DB
这个方案我们一般不考虑。原因是更新缓存成功,更新数据库出现异常了,
导致缓存数据与数据库数据完全不一致,而且很难察觉,因为缓存中的数据一直都存在。
2、先更新 DB,再更新缓存
这个方案也我们一般不考虑,原因跟第一个一样,数据库更新成功了,缓存更新失败,同样会出现数据不一致问题。
到这里可以看出,无论这两个操作的执行顺序谁先谁后,只要「第二步的操作」失败了,就会导致客户端读取到旧值。
我们继续分析,除了「第二步操作失败」的问题,还有什么场景会影响数据一致性:并发问题。
来源:https://blog.csdn.net/Zhuxiaoyu_91/article/details/127780117
延伸阅读
什么是PHP
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。
文章标题:缓存和数据库双写不一致,怎么解决,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/54047