缓存一致性问题

≯℡__Kan透↙ 提交于 2020-04-06 15:05:41

一般我们的热点数据用到缓存,都存在一个问题。

就是在数据更新时,到底是

1,先更新db再更新缓存

2,先更新缓存再更新db

3,更新db前让缓存无效

4,更新db后让缓存无效

1,先更新db再更新缓存的情况

存在一个问题,当对一条数据进行更新时,无法保证前面的线程先执行完

然后下一个线程再执行的情况

可能存在这样一种情况:线程1先更新了db但还没更新缓存,然后线程2更新了db又更新了缓存,然后线程1更新了缓存

这种情况还是比较常发生的,因为两个线程同时执行一个方法,时间上的先后难以保证,运行完此方法的先后。因此不推荐。

2,先更新缓存再更新db

这种存在一个问题,假设线程1更新了缓存,但还没更新db,然后线程2更新了缓存又更新了db,然后线程1再更新db

这样就导致了线程不安全的问题,跟1类似,因此不推荐。

3,更新db前让缓存无效

假设线程1先让缓存失效,还没更新db,此时有大量的线程2,3,4,5去查缓存,没有查到就会直接查数据库,造成缓存穿透问题

因此不推荐。

4,更新db后让缓存无效

线程1更新db后,将缓存无效了,然后再查了一次缓存,线程2更新db后,将缓存无效了,

此时线程1还是旧的数据,这种情况的发生是线程2的写db速度比线程1的读还快,一般这种情况概率比较低

所以推荐这种做法。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!