您好,登录后才能下订单哦!
本篇内容介绍了“先进行缓存操作还是数据库操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
缓存删除后,尚未更新数据库,并发读请求,从数据库读到了旧值,并且更新到缓存导致后续请求都是旧值。
时间  | 更新操作  | 
  | 
删除redis  | 读取操作  | |
  | 缓存没有数据  | |
  | 从数据库读到旧值  | |
  | 回写redis  | |
更新mysql  | 返回  | |
返回  | 
  | 
经典的延迟双删。就是:先更新数据线,再删缓存,之后延迟一段时间再删缓存。
时间  | 更新操作  | 
  | 
删除redis  | 读取操作  | |
  | 缓存没有数据  | |
  | 从数据库读到旧值  | |
  | 回写redis  | |
更新mysql  | 返回  | |
延迟一段时间  | 
  | |
  | 
  | |
删除redis  | 
  | |
  | 读取操作  | |
  | 缓存没有数据  | |
  | 从数据库读到新值  | |
  | 回写redis  | |
  | 返回  | 
延迟一段时间,挺重要不能拍脑袋,需要考虑2个因素
时间  | 更新操作  | 
  | 
删除redis  | 读取操作  | |
  | 缓存没有数据  | |
  | 从数据库读到旧值  | |
更新mysql  | 
  | |
延迟一段时间,  | 
  | |
删除redis  | 
  | |
  | 回写redis  | |
  | 返回  | 
自建mysql集群,配置不当,会出现mysql主从同步延迟大的情况。
时间  | 更新操作  | 
  | 
删除redis  | 读取操作  | |
  | 缓存没有数据  | |
  | 从数据库读到旧值  | |
  | 回写redis  | |
更新mysql主库  | 返回  | |
延迟一段时间,  | 
  | |
  | 
  | |
删除redis  | 读取操作  | |
  | 缓存没有数据  | |
  | 从库读到旧值  | |
mysql主从同步完成  | 回写redis  | |
  | 返回  | 
延迟时间必须大于查询接口的响应时间。
并且要大于mysql主从同步的时间,防止主从同步延迟造成,读到旧值的情况
--- 温安适 20210225
注意:建议查询接口要从主库进行读取
时间  | 更新操作  | 
  | 
更新mysql主库  | 读取操作  | |
  | 缓存有数据,读到旧值  | |
删除redis  | 返回  | |
  | 
  | |
  | 读取操作  | |
  | 缓存没有数据  | |
  | 主库读到新值  | |
  | 回写redis  | |
  | 返回  | 
等待缓存删除完成,期间数据库会有不一致数据短暂存在,但是一般可以不处理。
策略  | 潜在问题  | 解决方式  | 注意事项  | 
先删缓存,  | 并发条件下  | 延迟双删  | 延迟时间必须  | 
先更数据库,  | 并发条件下  | 不处理,  | 查询接口建议读主库,存在不一致,  | 
“先进行缓存操作还是数据库操作”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。