高并发缓存处理

缓存穿透:
1 出现原因:大量的请求在缓存中没有查询到指定的数据,因此需要从数据库中进行查询,造成缓存穿透。
2 后果:大量的请求短时间内涌入到database中进行查询会增加database的压力,最终导致database无法承载客户端请求的压力,出现宕机卡死等现象
3 解决方案:

a.空值缓存:在某些特定的业务场景中,对于数据的查询可能会是空的,没有实际的存在,并且这类数据信息在短
时间进行多次的反复查询也不会有变化,那么整个过程中,多次的请求数据库操作会显得有些多余。可以将这些空
值对应的key存储在缓存中,那么第二次查找的时候就不需要再次请求到database那么麻烦,只需要通过内存查
询即可。


b.布隆过滤器:通常对于database里面的数据的key值可以预先存储在布隆过滤器里面去,然后现在布隆过滤器
里面进行过滤,如果发现布隆过滤器中没有的话,就再去redis里面进行查询,如果redis中也没有数据的话,再
去database查询。这样可以避免不存在的数据信息也去往存储库中进行查询情况。

缓存雪崩:

  1. 出现原因:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统带来很大压力。
  2. 解决:
a.使用加锁队列来应付这种问题。当有多个请求涌入的时候,当缓存失效的时候加入一把分布式锁,只允许抢锁成
功的请求去库里面读取数据然后将其存入缓存中,再释放锁,让后续的读请求从缓存中去数据。弊端是过多的读请
求线程堵塞,将机器内存占满,依然没有从根本上解决问题。

b.在并发场景发生前,先手动触发请求,将缓存都存储起来,以减少后期请求对database的第一次查询的压力。
数据过期时间设置尽量分散开来,不要让数据出现同一时间段出现缓存过期的情况。

c.从缓存可用性的角度来思考,避免缓存出现单点故障的问题,可以结合使用主从+哨兵的模式来搭建缓存架构,
但是这种模式搭建的缓存架构有个弊端,就是无法进行缓存分片,存储缓存的数据量有限制,因此可以升级为
Redis Cluster架构来进行优化处理。

d.Ehchahe本地缓存+Hystrix限流&降级:使用Ehcache本地缓存的目的也是考虑在Redis Cluster完全不可
用的时候,Ehcache本地缓存还可以支撑一阵

布隆过滤器:

本质上是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你"某样东西一定
不存在或者可能存在"。相比于传统的List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返
回的结构是概率性的,而不是确切的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值