最初级的缓存不一致问题以及解决方案
问题: 先修改数据库,再删除缓存,如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据出现不一致
解决思路:
先删除缓存:再修改数据库,如果删除缓存成功了,如果修改数据库失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致因为读的时候缓存没有,则读数据库中旧数据,然后更新到缓存中。
比较复杂的数据不一致问题分析
数据发生了变更,先删除了缓存,然后要去修改数据库,此时还没修改,一个请求过来,去读缓存,发现缓存空了,去查询数据库,查到了修改钱的旧数据,放到了缓存中
数据变更的程序完成了数据库修改
完了,数据库和缓存中的数据不一样了。。。
解决方案:把写请求和读请求都放到本地队列中,开一个线程去执行,读请求每隔200ms去循环获取redis数据。