数据不一致怎么解?

数据不一致怎么办,面试中经常被问到的一道经典题目。

面试官会问:数据库读写分离的,那么怎么保证读写一致性?

答:用缓存,¥#!@##@

问:怎么保证缓存与数据库数据一致性呢?

答:加锁,!@##@¥%@#

 

前言:如果你的项目对数据要求是强一致性,那么请不要使用缓存。合适的缓存策略可以降低数据不一致的概率,但无法保证两者间的强一致性。

通常入门级缓存机制如下图:

写操作:先清缓存,写数据库后写入缓存中;读操作先读缓存,缓存中没有再读数据库并且回写入缓存中。

上图还是会面临一些问题:(写数据库失败这里就不分析了哈)

1.【并发】当并发读写操作时候,【读操作】在【写操作】之前,但写缓存在【写操作】之后,则缓存中依然是旧数据,此时就产生了读写不一致。

2.【DB读写分离】如果数据库是读写分离设计,并发读写或者写缓存失败依然会读取到旧数据,此时就产生了读写不一致。


于是想了一套解决数据不一致方案,如下图。

这里要做以下几点说明:

①加锁的目的:为了防止并发读写时,读的旧数据却后写入缓存中,导致长时间数据不一致,所以在写操作时加锁,这样读操作时若判断锁住则不进行缓存更新。

②写操作也会写缓存是为了解决数据库读写分离会有延迟同步的问题。

③这个锁可以使用Redis分布式锁即可。

3

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

数据不一致怎么解?
嘿!有什么能帮到您的吗?
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close