缓存一致性的问题

简介: 缓存一致性的问题


缓存一致性—双写模式

场景:第一个人卸了数据库,在数据同步到缓存的过程中由于网络等其他因素的延迟,第二个人写了数据库,很快就同步到了缓存,这时候缓存1进来修改了数据,这就导致了脏数据。

对于脏数据的问题:脏数据是暂时的,但是在数据稳定后,数据的自动过期时间过去后数据就又会正确。

因此,脏数据的发生主要是看对于脏数据的容忍度是多少。

缓存一致性—失效模式

场景:我们可以在修改了数据库以后将缓存中的数据删除掉,这样最新请求的数据会查询数据库然后将最新的数据放到缓存保证数据的一致性。

问题:写和读不一致的时候就会造成脏数据,例如:以下的场景,因为第一个人写了db删除了缓存,第二个人正在写db,第三个人开始读缓存发现没有数据就去读db,然后开始更新缓存,如果第二个人已经写完db删了缓存,那么第三个人拿到的数据放到缓存中其实是脏数据,如果第二个人在第三个人读完db更新缓存之后完成了删缓存的操作,那么第三个人拿到的还是脏数据。

缓存一致性—Canal

最后的解决方案

所以我们最好将经常写的数据或者可以容忍一段时间脏数据的数据放到缓存中。

相关文章
|
2天前
|
缓存 NoSQL 数据库
在高并发场景下,如何保证Redis缓存和数据库的一致性
在高并发场景下,如何保证Redis缓存和数据库的一致性
|
3天前
|
canal 消息中间件 缓存
面试题:如何解决缓存和数据库的一致性问题?
面试题:如何解决缓存和数据库的一致性问题?
15 1
|
11天前
|
消息中间件 缓存 NoSQL
奇怪的缓存一致性问题
奇怪的缓存一致性问题
|
5天前
|
消息中间件 存储 缓存
如何在数据库层面确保缓存一致性
如何在数据库层面确保缓存一致性
|
1月前
|
缓存 索引
cpu缓存一致性问题---cache写策略
cpu缓存一致性问题---cache写策略
16 1
|
29天前
|
缓存 NoSQL Java
Spring Boot与Redis的缓存一致性问题
Spring Boot与Redis的缓存一致性问题
|
2月前
|
消息中间件 缓存 中间件
中间件缓存一致性
【5月更文挑战第6天】中间件缓存一致性
29 1
中间件缓存一致性
|
1月前
|
canal 缓存 关系型数据库
高并发场景下,6种方案,保证缓存和数据库的最终一致性!
在解决缓存一致性的过程中,有多种途径可以保证缓存的最终一致性,应该根据场景来设计合适的方案,读多写少的场景下,可以选择采用“Cache-Aside结合消费数据库日志做补偿”的方案,写多的场景下,可以选择采用“Write-Through结合分布式锁”的方案,写多的极端场景下,可以选择采用“Write-Behind”的方案。
306 0
|
2月前
|
canal 缓存 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-03 Refresh Ahead + SingleFlight + 删除缓存 + 延迟双删
【5月更文挑战第11天】Refresh Ahead模式通过CDC异步刷新缓存,但面临缓存一致性问题,可借鉴Write Back策略解决。SingleFlight限制并发加载,减少数据库压力,适合热点数据。删除缓存模式在更新数据库后删除缓存,一致性问题源于读写线程冲突。延迟双删模式两次删除,理论上减少不一致,但可能降低缓存命中率。选用模式需权衡优劣,延迟双删在低并发下较优。装饰器模式可用于实现多种缓存模式,无侵入地增强现有缓存系统。
83 2
|
2月前
|
缓存 数据库 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-02 Write Through + Write Back
【5月更文挑战第10天】`Write Through`是一种缓存策略,写操作仅需写入缓存,缓存负责更新数据库。异步版本可能丢失数据,而同步变种先写数据库再异步刷新缓存,减少丢数据风险。`Write Back`模式数据先写入缓存,过期时才写入数据库,可能导致数据丢失,但若使用Redis并确保高可用,可部分解决一致性问题。在特定条件下,如使用SETNX命令,能缓解一致性挑战。
41 0
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-02 Write Through + Write Back