什么情况下数据库和缓存不一致?

首先,在非并发的场景中,出现不一致的问题大家都能比较容易的理解,因为缓存的操作和数据库的操作是存在一定的时间差的。而生两个操作是没办法保证原子些的,也就是说,是有可能一个操作功,一个操作失败的。所以,这就必然会存在不一致的情况。

如果在并发场景中,两个线程,同时进行先写数据库,后更新缓存的操作,就可能会出现不一致.

如果在并发场景中,两个线程,同时进行先更新缓存,后写数据的操作,也可能会出现不一致

在并发场景中,还有一种容易忽略的并发场景,那就是读写并发。

我们知道:当我们使了缓存之后,一个读的线裎在查间数据的过程是这样的

1、查间缓存,如果缓存中有值,则直接返回

2、查间数据库

3、把数据库的查间结果更新到缓存中

所以,对于一个读线裎来说,虽然不会写数据库,但是是会更新缓存的,所以,在一些恃殊的并发场景中,就会导致数据不一致的况。

线程执行情况:

也就是说,假如一个读线程,在读缓存的时候没查到值,他就会去数据库中查间,但是如果查洵到结果之后,更新缓存之前,数据库被更新了,但是这个读线裎是完全不知道的,那么就致最终缓存会被車新用一个"旧值"覆盖掉,这也就寻致了缓存和数据库的不一致的现象。

但是这种现具实发生的概率比较低,因为一般一个读操作是很快的,数据库+缓存的读操作基本在十几毫杪左右就可以完成了。而在这期间,刚好另一个线裎执行了一个比较耗时的写操作的概率确实比较低。

相关推荐
杨云龙UP17 分钟前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
AI人工智能+电脑小能手34 分钟前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
通过java后端代码来实现给word内容补充格式文本内容控件,以及 设置控件的标记和标题
java·c#·word
墨染天姬2 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
古月-一个C++方向的小白2 小时前
MySQL数据库——数据类型
android·数据库·mysql
無限進步D3 小时前
Java 面向对象高级 接口
java·开发语言
qq_413502023 小时前
如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL
jvm·数据库·python
逸Y 仙X3 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
m0_738120723 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全