
你不知道的缓存穿透、缓存雪崩、缓存击穿及解决方案
发布日期:2021-09-16 04:36:18
浏览次数:1
分类:技术文章
本文共 617 字,大约阅读时间需要 2 分钟。
缓存穿透
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。
缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期 3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
缓存击穿:
key对应的数据在db中存在,但在redis中过期,此时若有大量请求过来,这些请求发现缓存过期一般都会从后端db加载数据并回设到缓存。这个时候大病大的请求可能会瞬间把后端db压垮。
解决方案:
对缓存查询加锁,如果KEY不存在,就加锁,然后查DB入缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回数据或者进入DB查询
转载地址:https://blog.csdn.net/wlg9527/article/details/106521833 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.249.70.110]2022年06月28日 12时33分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
SpringBoot入门(六)数据响应与内容协商
2019-12-30 11:47:55
力扣题59螺旋矩阵II
2019-12-30 11:47:53
Redis入门(四)主从复制
2019-12-30 11:47:53
Redis入门(五)集群
2019-12-30 11:47:53
Redis入门(六)应用问题
2019-12-30 11:47:54
SpringBoot入门(一)
2019-12-30 11:47:54
Shell编程入门
2019-12-30 11:47:52
力扣题739每日温度
2019-12-30 11:47:52
Redis入门(二)
2019-12-30 11:47:52
力扣题844比较含退格的字符串
2019-12-30 11:47:52
力扣题977有序数组的平方
2019-12-30 11:47:52
力扣题904水果成篮
2019-12-30 11:47:52
Redis入门(三)
2019-12-30 11:47:53
Git入门
2019-12-30 11:47:50
Git和GitHub
2019-12-30 11:47:51
力扣题621任务调度器
2019-12-30 11:47:51
力扣题617合并二叉树
2019-12-30 11:47:51
力扣题647回文子串
2019-12-30 11:47:51
Redis入门(一)
2019-12-30 11:47:51
力扣题461汉明距离
2019-12-30 11:47:49