浅谈缓存一致性问题
一、为什么使用缓存?
现在大多数互联网公司使用缓存通常都是为了**缓存一些热点数据,降低数据库的访问压力**,提升系统的响应速度,为用户提供更好的产品体验。二、保证缓存一致性的方案(写操作)
1.先操作数据库,再删缓存
如果先操作数据库,再删除缓存,当原子性被破坏:- 操作数据库成功;
- 删除缓存失败;
此时,造成数据库中数据和缓存数据不一致。
解决方案:
有方案建议redis操作进行失败重试,设置重试次数。但当超过重试次数后,仍无法解决数据不一致问题。
不推荐此方案。
2.先删缓存,再操作数据
如果先删除缓存,再操作数据库,当原子性被破坏:- 删除缓存成功;
- 操作数据库失败;
此时,数据库中数据还是之前的数据,数据保持一致,对业务无影响。下次查询会多命中一次cache miss。
但在高并发场景下,由于数据库主从同步延迟,可能造成缓存和数据库数据不一致。
解决方案:
在主从同步延迟期间,可以选择性的读主库,通过设置redis记录当记录存在时读取主库,不存在时仍读取从库,其中失效时间设定为主从同步延迟时间。
三、总结
推荐采用:- 先删除缓存,再操作数据;
- 并发少的情况下,可以监听binlog参数对应缓存;
- 并发高为避免主从延迟同步造成的数据不一致,可以采用选择性读主的方式。
标签:缓存,浅谈,删除,数据库,一致性,操作,数据 来源: https://blog.csdn.net/kerryg/article/details/120688880
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。