你不知道的缓存穿透、缓存雪崩、缓存击穿及解决方案
发布日期: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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:详谈Mybatis和Hibernate 的区别
下一篇:FreeSwitch如何实现会话保持

发表评论

最新留言

很好
[***.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