1. 修改了配置文件是先淘汰缓存还是先写表
1)假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致
2)假设先淘汰缓存,再写数据库:第一步淘汰缓存成功,第二步写数据库失败
结论:先淘汰缓存,再写数据库。
2. 数据不一致原因
第一种情况肯定会出现数据不一致
关键分析第二种
1)A用户修改配置,清空cache,去修改数据库
2)这时B用户过来查看cache为空,去读取数据库,A用户还没修改完,此时B用户读取的为脏数据,并且写入了缓存,
3)由于A用户和B用户修改和读取的时间差,导致了数据的不一致
3. 解决方案:
1)A用户修改配置,清空cache,setnx一个值(设置一个过期时间),然后去修改数据库,修改成功或失败后,删除setnx的key
2)这时B用户过来查看cache为空,先看下setnx是否成功,失败代表正在修改数据库,成功后获取数据,写入缓存,删除setnx的key
setnx解决数据不一致性的一种情况
最新推荐文章于 2024-04-26 00:18:49 发布