缓存一致性问题

编程

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

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

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的读还快,一般这种情况概率比较低

所以推荐这种做法。

以上是 缓存一致性问题 的全部内容, 来源链接: utcz.com/z/514856.html

回到顶部