先进行缓存操作还是数据库操作
本篇内容介绍了“先进行缓存操作还是数据库操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
网站设计制作、做网站,成都做网站公司-创新互联已向近千家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
先更数据库,再删除缓存
问题
缓存删除后,尚未更新数据库,并发读请求,从数据库读到了旧值,并且更新到缓存导致后续请求都是旧值。
时间 | 更新操作 |
|
删除redis | 读取操作 |
| 缓存没有数据 |
| 从数据库读到旧值 |
| 回写redis |
更新MySQL | 返回 |
返回 |
|
解决方式
经典的延迟双删。就是:先更新数据线,再删缓存,之后延迟一段时间再删缓存。
时间 | 更新操作 |
|
删除redis | 读取操作 |
| 缓存没有数据 |
| 从数据库读到旧值 |
| 回写redis |
更新mysql | 返回 |
延迟一段时间 |
|
|
|
删除redis |
|
| 读取操作 |
| 缓存没有数据 |
| 从数据库读到新值 |
| 回写redis |
| 返回 |
延迟一段时间,挺重要不能拍脑袋,需要考虑2个因素
考虑查询接口响应时间
时间 | 更新操作 |
|
删除redis | 读取操作 |
| 缓存没有数据 |
| 从数据库读到旧值 |
更新mysql |
|
延迟一段时间, |
|
删除redis |
|
| 回写redis |
| 返回 |
考虑mysql主从同步事件
自建mysql集群,配置不当,会出现mysql主从同步延迟大的情况。
时间 | 更新操作 |
|
删除redis | 读取操作 |
| 缓存没有数据 |
| 从数据库读到旧值 |
| 回写redis |
更新mysql主库 | 返回 |
延迟一段时间, |
|
|
|
删除redis | 读取操作 |
| 缓存没有数据 |
| 从库读到旧值 |
mysql主从同步完成 | 回写redis |
| 返回 |
延迟时间必须大于查询接口的响应时间。
并且要大于mysql主从同步的时间,防止主从同步延迟造成,读到旧值的情况
--- 温安适 20210225
先删缓存,再更新数据库
注意:建议查询接口要从主库进行读取
时间 | 更新操作 |
|
更新mysql主库 | 读取操作 |
| 缓存有数据,读到旧值 |
删除redis | 返回 |
|
|
| 读取操作 |
| 缓存没有数据 |
| 主库读到新值 |
| 回写redis |
| 返回 |
存在的问题:
等待缓存删除完成,期间数据库会有不一致数据短暂存在,但是一般可以不处理。
总结:
策略 | 潜在问题 | 解决方式 | 注意事项 |
先删缓存, | 并发条件下 | 延迟双删 | 延迟时间必须 |
先更数据库, | 并发条件下 | 不处理, | 查询接口建议读主库,存在不一致, |
“先进行缓存操作还是数据库操作”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
文章标题:先进行缓存操作还是数据库操作
当前URL:http://pwwzsj.com/article/jhssgc.html