新闻动态

你的位置:vv时时彩娱乐平台 > 新闻动态 >

【蓝因子教育】缓存一致性问题

发布日期:2025-03-07 16:50点击次数:129

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

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

1,先更新 db 再更新缓存

2,先更新缓存再更新 db

3,更新 db 前让缓存无效

4,更新 db 后让缓存无效

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

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

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

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

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

2,先更新缓存再更新 db

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

展开剩余47%

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

3,更新 db 前让缓存无效

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

因此不推荐。

4,更新 db 后让缓存无效

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

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

所以推荐这种做法。

发布于:湖南省

Powered by vv时时彩娱乐平台 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024