缓存一致性—双写模式
场景:第一个人卸了数据库,在数据同步到缓存的过程中由于网络等其他因素的延迟,第二个人写了数据库,很快就同步到了缓存,这时候缓存1进来修改了数据,这就导致了脏数据。
对于脏数据的问题:脏数据是暂时的,但是在数据稳定后,数据的自动过期时间过去后数据就又会正确。
因此,脏数据的发生主要是看对于脏数据的容忍度是多少。
缓存一致性—失效模式
场景:我们可以在修改了数据库以后将缓存中的数据删除掉,这样最新请求的数据会查询数据库然后将最新的数据放到缓存保证数据的一致性。
问题:写和读不一致的时候就会造成脏数据,例如:以下的场景,因为第一个人写了db删除了缓存,第二个人正在写db,第三个人开始读缓存发现没有数据就去读db,然后开始更新缓存,如果第二个人已经写完db删了缓存,那么第三个人拿到的数据放到缓存中其实是脏数据,如果第二个人在第三个人读完db更新缓存之后完成了删缓存的操作,那么第三个人拿到的还是脏数据。
缓存一致性—Canal
最后的解决方案
所以我们最好将经常写的数据或者可以容忍一段时间脏数据的数据放到缓存中。