击穿、穿透、雪崩

前言:这三者都是在高并发的情况下才会出现的情况

 

击穿:对于热点key进行大量的访问,在key达到过期时间失效的瞬间,就会有大量的访问打到DB上,这就是 击穿

  • 解决方案一:在redis没有查到key的时候,这个线程可以执行setnx,执行成功后才去查DB,否则这个线程就循环等待就好了,这样就只有一个线程去查DB,为避免这个线程设置完setnx后挂掉死锁,可以为这个setnx的key加上过期时间

穿透:查询的大量key都不在redis与db中,想到与无效的key

  • 解决方案一:引入布隆过滤器,减少无效key的查询,但普通的布隆过滤器只能增加不能删除,如果业务上有删除key的需求,就可能需要重新生成布隆过滤器或使用可以减少key的布隆过滤器

雪崩:大量的key在同一时间过期失效,造成大量的请求打到DB上

  • 解决方案一:将过期时间加上随机数之类的,避免同一时间过期,但需要主要,有些业务数据可能要求必须某一时间点更新,比如银行利率等数据,那就一定会出现雪崩,需要其他手段处理
posted @ 2022-02-25 10:42  叫我林大官人  阅读(134)  评论(0)    收藏  举报