整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

来说说缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决

来说说缓存穿透、缓存击穿、缓存雪崩都是什么?怎么解决?

者:纪莫

原文链接:https://www.cnblogs.com/jimoer/p/13677132.html

前言

看到题目就知道了,这又是我在面试中遇到的,最近面试,把我的博文质量感觉都提上来了。面一次试感觉够我总结一周的,但还是每次都能遇到知识盲点,那以后就当面试总结是个扫盲的过程吧。

缓存穿透

面试的时候就被问到了这个问题,具体描述就是,正常的请求都是先请求到缓存(就当我们的缓存是Redis吧),如果缓存中存在数据,就直接返回,如果缓存中不存在请求的数据,就查询数据库,然后将查询到的数据再放到缓存中。

那么如果现在有一堆的请求,在缓存中没有,数据库中也没有,怎么办?这种垃圾请求还特别多,而且因为是在数据库没有查询到,所以也不会被放到缓存中,这就是缓存穿透的场景。

大量的这种请求,最终会导致数据库压力剧增,最终就会将数据打垮,若是这个数据库是核心数据库,那么其他所有依赖这个库的接口都会报错。


例如,每次请求的参数都是id,而id是我们数据库里的自增主键,但是请求过来的参数要么是-1这种,要么就是特别大的一个数,反正就是不存在的数据。

解决缓存穿透

那么如何解决缓存穿透呢?

  • 首先最基本的就是要做参数校验,非法的参数就直接return,连缓存层都到不了。
  • 当请求的数据在穿过Redis后,数据库也返回空,这样的数据也可以存入到缓存中,然后过期时间可以设置一个比较短的时间,这样能够在一定程度上保障后端数据库的安全。
  • 可以使用Redis的布隆过滤器,这个工具可以有效的防止缓存穿透的发生,我们可以将一个参数是否存在保存为一个boolean值,然后需要一个bit就可以存储,这样的数据压缩到一个数据结构中,就是布隆过滤器的原理。即节省存储空间,又能达到效果。

缓存击穿

我们在Redis存储的数据,主要是缓存的效果,目的是为了解决DB的压力,所以一些热点数据,都是先从缓存中获取的,当缓存中不存在的时候再从DB中获取然后再存入缓存。

但是如果一个高频的热点数据,在失效的一瞬间,它的大量请求就会直接打到DB上,这样在DB还没有返回数据给Redis的时候,DB承受了热点请求的压力,就好像缓存是一个水桶,然后突然水桶破了一个洞,直接冲垮了后面的堤坝(DB)。

解决缓存击穿

造成缓存击穿的原因是,在同一时刻从数据库中获取了大量数据,并且设置了相同的过期时间,这些缓存就会在同一时刻失效,这样就造成了缓存击穿的问题。
解决方案

  • 一些热点的数据,我们可以设置永不过期;或者是在访问数据的时候延长过期时间
  • 也可以用分布式锁,来锁住数据,保证同一时间只有一个线程能够获取数据,其他请求获取不到数据,只能等待,但是在高并发的场景下,这种方案,体验不太好,并且分布式锁的压力也会特别大

缓存雪崩

Redis中存储了很多的数据,但是有时候这些数据会出现,在同一个时刻批量过期的情况,因为有可能这些数据是批量插入的,所以他们的过期时间就会都在同一个时间。

正好在这个批量数据过期的时间点,大量的请求过来了,因为缓存数据过期了,所以没有命中缓存,直接请求到了数据库中。数据库的压力突然剧增,甚至有可能直接撑不住挂掉。然后有可能DBA会紧急重启DB,但是刚一恢复,新的请求立马又把DB打垮了。

也有可能就是Redis挂了,缓存都不能用了,请求也是直接打到了DB上,然后DB也是扛不住压力,直接挂掉。再恢复,再挂掉。


Redis中同一时刻大量的Key过期,那一瞬间和Redis不存在一样,还有Redis真的挂了的情况,这对服务和DB来说是灾难性的问题。

解决缓存雪崩

解决方案

  • 批量存入缓存的数据,我们可以为这些数据分别配置比较合理的过期时间,即使是随机分配过期时间也可以,避免同一时间失效。
  • 热点数据永不过期,更新操作时直接更新缓存,但是并不设置过期时间。
  • 当数据库缓存出问题时,可以采用降级措施,虽然是用DB顶上了请求,但是可以通过降级方案,保证某些数据在同一时刻只能有一个线程在查询数据库和写缓存,这样不至于把数据库给搞崩了。
  • 还有就是为了防止Redis挂了,导致的缓存雪崩,可以保证Redis的高可用,就是将Redis集群部署,然后将热点数据都分配到不同的节点上,这样就可以有效的防止雪崩的出现。

当说到Redis高可用的时候,面试有可能会继续问,怎么保证Redis在高可用的情况下,也就是集群中的数据同步时,而数据不会丢失等情况。

务院此前建议延长 3 天春节假期,意味着我们还有 3 天的时间就要开工。目前武汉肺炎依旧属于高发的态势,作为打工仔的我们,又该如何选择合适的口罩来应对这场疫情?



面对来势汹汹的病毒,口罩是我们抵抗病毒的第一道防线。口罩可分为四大类,棉布口罩,活性炭口罩,医用口罩以及 N95 口罩。其中棉布口罩主要用作挡风和灰尘,活性炭口罩则是吸附臭味和有机气体。想要抵挡病毒和细菌的侵袭,医用口罩和 N95 口罩会更为适合。哪个更优?



▍口罩的结构

我们先来看看口罩的结构,一般医用口罩分作三层,最外层也即是有颜色的一面,是防水层,可以阻挡飞沫;中间一层为熔喷材料,可以过滤以及吸附含有细菌或者病毒的飞沫;最内一层则是吸水层,可以吸收佩戴者本人的湿气和水分。



▍口罩的过滤性能

通常要想评估一个口罩的过滤性能,常看以下 5 点,部分口罩包装上也会有这些参数的标识。


1、细菌过滤效率(Bacterial Filtration Efficiency, BFE)

2、颗粒过滤效率 (Submicron Particulate Filtration Efficiency , PFE)

3、病毒过滤效率(Viral Filtration Efficiency,VFE)

4、压力差(Delta-P/ Differential Pressure)

5、防液体能力(Fluid Resistance)



BFE 代表细菌过滤效率,评价口罩由内部过滤微生物颗粒的能力,测试方法是以约 3.0 μm(微米)的微粒及 28.3 lpm(公升 / 分钟)流速來进行。PFE 是颗粒过滤效率,考察口罩阻隔细微颗粒的能力,一般实验室会利用 0.1-1 μm 的微粒及 28.3 lpm(公升 / 分钟)流速來进行。VFE 则代表病毒过滤效率,表示口罩对病毒的阻挡能力,通常采用平均 3.0 μm(微米)的微粒及 28.3 lpm(公升 / 分钟)流速來进行。压力差代表佩戴口罩后内外压力的差别,一般压力差越高,密封性越好,相应的透气性越低。合成血液穿透阻力代表口罩对于防水以及血液和体液飞溅的应对能力。


▍口罩的标准

我国食药监局对口罩产品作出了规范,根据不同的应用场景,可分为普通医用口罩,医用外科口罩,呼吸防护口罩和医用防护口罩。



这里补一句,有部分口罩的标准号可能是 YZB 为前缀,这个是医疗器械注册产品标准,可以前往国家药品监督管理局的官网,查询这个口罩的注册编号,里面会显示对应的口罩类型。



那么对于大多数的普通人,我们应该选择哪一标准的口罩?首先,病毒一般不会独立在空气中漂浮,它需要依附在载体上,通常是人打喷嚏后形成的飞沫,一般这类飞沫直径是 0.1-2 毫米,飞沫也会通过蒸发变成飞沫核,飞沫核是小的干燥颗粒,直径小于 100 微米,多数飞沫核直径在 1μm 以上,可以长时间在空气漂浮。由标准来看,医用外科口罩就可以阻挡多数带有病原体的飞沫,不过,医用外科口罩密封性并不够,在密闭环境中,有机会吸入空气中带有病毒的飞沫核。这时候,我们更建议购入密闭性能更好的 N95 口罩。



▍什么是 N95 口罩?

N95 口罩一种通过 FDA(美国食药监局)检验,同时经过 NIOSH(美国国家职业安全卫生研究所)认证的口罩,国内对应的型号是 KN95,欧洲则是 FFP2。


N 代表非抗油(not resistant to oil),代表口罩不能阻隔油性粒子,除了 N 以外,还有 R(resistant to oil),P(oil proof)系列,其中 R 和 P 代表可以使用在油气环境,一般生物性微粒不属于油性颗粒,R 级和 P 级的口罩目前并没有太大必要入手。至于后面的数字 95,代表可以阻挡 95% 直径 0.3 微米以上的非油性颗粒,性能更好的还有 99 与 100,不过透气性能随之下降。



相比医用外科口罩来说,N95 提供到了更好的密闭性,正确佩戴时可以完全覆盖鼻和口部,同时它也可以给到至少 95% 的颗粒过滤能力。N95 口罩密闭性能良好,呼吸时气流不会从口罩两边的缝隙流入流出,可最大程度发挥阻隔病菌的效果。不过,密闭性能越好,口罩的 Delta P 值越高,也就代表它越不透气。有不少人就因为 N95 口罩闷得难受,不时拉开口罩透气,这就无意中增加了病菌侵入的概率,如果并非病毒携带者,可以购买带有呼吸阀的 N95 口罩。假若 N95 没货,我国还额外有 KN90 标准的口罩,也可以考虑。



那么我们有没有必要购入满足 GB19083-2010 标准,也即是医用级别的 KN95 口罩呢?该标准相比非医用的标准,主要增加了一项阻止血液和体液渗透的能力,对于一般人来说,如果不是在医院环境下,基本不会面对这样的状况,我们建议还是留给真正需要的前线医护人员。



口罩固然十分重要,我们更需要在日常生活中注意个人卫生,勤洗手,不去人群聚集的地方,不进食野味和未经煮熟的动物产品。如果发现自己有持续发烧,胸闷或者是干咳的情况,为了自己和身边人的健康,请尽早去医院寻求医生的意见。


参考资料

  1. 中华人民共和国医药行业标准 YY 0469-2011 / YY0969-2013 / GB2626-2006 / GB19083-2010
  2. Nelsonlabs 测试机构 https://www.nelsonlabs.com/testing/surgical-face-masks-and-general-use-masks-astm-f2100/
  3. 美国国家职业安全卫生研究所(NIOSH) https://www.cdc.gov/niosh/npptl/topics/respirators/disp_part/respsource3healthcare.html#e

倦了网易版我的世界MOD少得可怜,但是离开了网易平台联机又显得异常困难?今天我教大家一种不需要正版我的世界账号又可以联机的方法。咱话不多说直接上教程。

步骤一,下载必备MOD。

[1.16.2-1.12.2][自定义局域网服务器-LanServerProperties]自定义端口+关正版验证

https://www.mcbbs.net/thread-1056335-1-1.html

(出处: Minecraft(我的世界)中文论坛)
打开上述链接


点击下载地址

步骤二,把下载好的MOD放进我的世界mods文件夹

步骤三,打开我的世界进入地图打开选项

点击对局域网开放


注意在线模式要关掉,监听端口可自己修改

点击创建一个局域网世界,就会如下图所示。

之后你的小伙伴便能在多人游戏中搜索到你的房间了。

如果搜索不到就点击添加服务器,输入创建游戏房间电脑的 IP地址:监听端口 IP可以用百度搜索“本机IP地址”获得

如果不知道怎么下载非网易版《我的世界》,那就点个关注。我会尽快更新下一期。

最后祝你和小伙伴玩得开心。