首页资讯商务会员钢材特钢不锈炉料铁矿废钢煤焦铁合金有色新能源化工水泥财经指数人才会展钢厂海外研究统计数据期货论坛搜索导航短信En
当前位置:钢之家 > 钢铁论坛
   
搜索
显示模式:
查看: 745|回复: 4
打印 上一主题 下一主题

纯技术-缓存三剑客(穿透,雪崩,击穿)理解

[复制链接]

80

主题

94

回帖

1878

积分

金牌会员

Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2024-8-28 10:00:55 |只看该作者 |倒序浏览
缓存穿透概念理解
缓存穿透正如其名穿透,说明访问的数据在缓存和数据库里都没用,而且此时还大量的发起了访问,导致数据库崩溃

解决方法
一、第一种解决方法就是保存空值在数据库里面,但是这种情况会很消耗空间

二、第二种办法就是使用布隆过滤器,当有数据来访问的时候,布隆过滤器检查一下如果缓存里没有,直接返回回去,此时布隆过滤器也有一定的弊处,假如我此时访问的数据是刚刚好过了我redis的过期时间,但是此时mysql里面还有数据,那不就可惜了吗?所以有一种方式叫缓存预热(缓存预热就是相当于我设置的数据过期时间是个假时间,什么意思呢?就是相当于我过期时间到了但是我不会将此时在缓存里的数据删除,而是将这个旧数据一直存储在缓存当中,当有数据访问这个缓存的时候,我先返回旧数据,再向数据库发请求获取新数据来更新,但是如果用了缓存预热这种技术的话就不能再使用惰性删除了)

缓存雪崩
概念理解
缓存雪崩,这个也如其名雪崩,为什么会雪崩呢?首先最先能想到的就是redis宕机了,缓存不管用了,大量数据打到了数据库上,还有什么原因呢?还有就是大量缓存失效了,同样会造成大量数据打到数据库上,造成数据库崩溃。那么应该如何解决呢?

解决方法
一、首先便是给每个缓存设置过期时间,避免大量缓存同时失效的情况

二、还能用分布式锁来做一个限制,当缓存失效之后,只允许一个请求进数据库来获取,其他的请求等待,这样的话不好的也就是会造成等待时间很长

缓存击穿
概念理解
对于缓存击穿而言,那就很简单了,他是击穿而不是穿透,说明了什么说明了他在数据库里有,也就说明此时是一个高频请求,怎么会造成这种影响呢?首先最应该想到的就是一个高频请求的缓存key失效了,导致所有的请求都打在数据库上

解决方法
一、此时能怎么解决呢?首先就是获取一个互斥锁,如果获取成功则直接从数据库中获取数据并更新缓存,避免其他请求同时访问数据库

二、其次就是设置热点key的ttl永不过期,或者使用缓存预热也可以。
※ ※ ※ 本文纯属【Ariers】个人意见,与【钢铁论坛 | 钢之家钢铁网】立场无关※ ※ ※
回复 快速回复

使用道具 举报

1

主题

662

回帖

7549

积分

钢之家会员组

沙发
发表于 2024-8-30 10:40:09 |只看该作者
※ ※ ※ 本文纯属【九拍】个人意见,与【钢铁论坛 | 钢之家钢铁网】立场无关※ ※ ※
回复

使用道具 举报

0

主题

77

回帖

878

积分

高级会员

Rank: 4

板凳
发表于 2024-8-30 14:54:45 |只看该作者
※ ※ ※ 本文纯属【s_1_472885】个人意见,与【钢铁论坛 | 钢之家钢铁网】立场无关※ ※ ※
回复

使用道具 举报

0

主题

136

回帖

1533

积分

金牌会员

Rank: 6Rank: 6

地板
发表于 2024-8-30 15:42:05 |只看该作者
※ ※ ※ 本文纯属【s_1_418685】个人意见,与【钢铁论坛 | 钢之家钢铁网】立场无关※ ※ ※
回复

使用道具 举报

428

主题

2081

回帖

27384

积分

论坛元老

Rank: 8Rank: 8

5
发表于 2024-9-4 10:30:21 |只看该作者
纯技术贴
※ ※ ※ 本文纯属【onlylong】个人意见,与【钢铁论坛 | 钢之家钢铁网】立场无关※ ※ ※
回复

使用道具 举报

==| 关于钢之家|联系方式 |服务项目|服务报价|技术服务|在线订购|企业短信|会员注册 | 网站动态|诚聘英才|帮助中心|意见与建议|在线客服|我要纠错 |==

您希望联系哪位客服?(单击选择)

回顶部