缓存更新策略

先更新数据库再更新缓存 和 先更新缓存再更新数据库直接放弃,因为缓存有时候并不是数据库的直接数据,有可能是经过一系列计算得来的数据,如果更新缓存,代价太大

先删缓存再更新数据库:
问题:当线程A要更新数据,先把缓存删了,这时候线程B要获取数据,从缓存中得不到数据,就到数据库取,但是数据库的数据还没有被线程A更新,于是B获取到了脏数据并且将脏数据重新注入缓存中,造成以后取得数据都是脏的
《缓存更新策略》

解决:1.加锁,将删缓存和更新数据库的操作视作一个整体,赋予原子性
2.延迟双删,A删缓存,更新数据库,然后再次删缓存。

优化:这里数据库如果是读写分离的话,写数据库和读数据库的同步有延迟,那线程B获取数据时发现缓存没数据会从读数据库读数据,但是读数据库有延迟还没更新,读的就是脏数据,我们可以通过强制线程B去读写数据库解决
《缓存更新策略》

先更新数据库再删缓存:
问题1:线程A要更新数据,先更新数据库数据,这时候线程B要获取数据,但是缓存还没被线程A删除,就直接获取到了脏缓存,不过这种情况概率很小
问题2:线程A要更新数据,先更新数据库数据,这时候出现错误,导致A删除缓存的操作没有执行,这样的话缓存之后就一直是脏数据了
解决:
1.加锁
2.通过消息队列存储缓存删除操作,当你出现错误,系统就将这次要删除的缓存放入消息队列,然后系统通过拉取消息队列中的元素再次对缓存进行删除。
《缓存更新策略》

优化:这里耦合度太高,可以通过消息队列拉取binlog日志,将要删除的元素放入消息队列中
《缓存更新策略》

    原文作者:成为更好的qyk嘻嘻
    原文地址: https://blog.csdn.net/weixin_48439438/article/details/123432717
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞