暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

缓存和数据库的一致性

方片四 2021-06-28
265

本文采用先更新数据库,再删除缓存的策略,至于为什么不采取:先更新数据库,再更新缓存先删除缓存,再更新数据库的策略如下有介绍

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论