Redis学习(四):缓存常见问题
2021/8/27 19:07:28
本文主要是介绍Redis学习(四):缓存常见问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
缓存常见问题
缓存击穿
概念:对于一些设置了过期的key,如果这个key可能会在某些时间点被超高并发地访问,是一个热点数据
原因:缓存在某个时间点过期的时候,恰好在这个时间点对这个key有大量的并发请求过来,该key没有命中,大量请求穿透到数据库服务器。
解决方案:
1)使用互斥锁;在缓存失效的时候(判断拿出来的值为空),不是立即去Load Db,而是先使用setNx,去set一个Mutex key,当返回成功时,再进行Load Db的操作并回设缓存;
2)永远不过期;把过期时间存在key对应的value里,如果发现要过期了,通过一个后台的异步线程进行缓存的构建
缓存雪崩
这个和缓存击穿类似,区别是这里针对的场景是多个key,前者是某一key缓存。
概念:大量的key设置了相同的过期时间,导致缓存在同一时刻全部失效,最终造成瞬时DB请求量大、压力骤增,引起雪崩。
原因:大量缓存在同一时间失效;大量请求落到后端DB上;
解决方案:
1)控制缓存并发、击穿现象发生
2)设置不同的过期时间,让缓存失效时间点尽量均匀
3)做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2缓存设置为长期(高可用缓存集群)
缓存穿透
概念:访问一个一定不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂断
原因:key被高并发访问;该key没有命中,去DB获取,所以会有大量请求穿透到数据库服务器
解决方案:
1)布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤,避免对底层数据存储系统造成压力
2)将未查询到的key的空值也写进缓存,但是可以设置一个较短的过期时间,最长不超过5分钟
注意点:
开发是否有将刚查询出来的数据放入缓存,尤其是对null的处理
缓存一致性
概念:当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。
原因:对同一个数据进行读写,在数据库层面并发的读写并不能保证顺序;可看上一篇博客关于《双写》问题描述
解决方案:请查阅《双写一致性》博文
这篇关于Redis学习(四):缓存常见问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧