本文采用先更新数据库,再删除缓存的策略,至于为什么不采取:先更新数据库,再更新缓存、先删除缓存,再更新数据库的策略如下有介绍。
1. 先更新数据库,再更新缓存
Ø 同时有请求a、b进行更新操作,a更新了库,b更新了库,b更新了缓存,a更新了缓存。正常a更新缓存应该比b更新早,但因为网络等种种原因,b却比a早更新了缓存。这就导致了脏数据。
Ø 假设写数据库场景比较多,读数据场景比较少的业务需求,采用先更新数据库,再更新缓存就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。
2. 先删除缓存,再更新数据库
Ø 请求a进行写操作,删除缓存,请求b查询发现缓存不存在,请求b去数据库查询得到旧值,请求b将旧值写入缓存,请求a将新值写入数据库。
3. 先更新数据库,再删除缓存
Ø 缓存失效,请求a查询数据库,得一个旧值,请求b将新值写入数据库,请求b删除缓存,请求a将查到的旧值写入缓存。但是发生此事件需要读数据库比写花费更多时间。
解决方案:为缓存设置有效时间、延迟删除缓存(忽略)
方案1如下图

该方案缺点对代码造成了大量入侵
方案2如下图

文章转载自方片四,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




