redis的数据击穿和雪崩及处理办法

redis击穿:

请求数据顺序,首先会从redis缓存中拿数据,若未拿到则查数据库,再写到redis。如果是请求一条根本不存在的数据时,则会去直接访问数据库,但是数据库也没有,所以它也没把数据写入redis缓存。所以每次这种请求都会直接访问数据库。如果请求的数量太大的话,这种绕过redis直接访问数据库情况则成为击穿。

解决办法:

1、在查询数据库的时候若未查询到数据,依然在redis中保存一条记录,并把value设置为null或者其他便于区别的值,可以再给该条数据设置一个过期时间,那么以后再有请求过来访问时就不会绕过redis直接去查库。

2、在从redis中获取数据前增加查询校验,对所有可能存在的查询参数缓存到hash集合中,若某个请求在该集合中存在,则可以访问rides,若不存在则直接丢弃该请求。

—————————————————————————————————————————–

redis雪崩:

每个key(即数据)如果设置了失效时间的话,如果大量key同时过期的时候,或者说因为某种原因redis中的数据突然大批量丢失,这些key又大量地去请求这些key时,因为redis里面没有这些数据,就会大量的请求就会大量涌向数据库,就会导致数据库处理不过来,导致“雪崩”。

解决办法:

1、设置均匀的过期时间,避免某段时间出现大批量数据失效

2、在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

3、做二级缓存,一级缓存未查询到数据,则从二级缓存查询

    原文作者:说好的幸福_
    原文地址: https://www.jianshu.com/p/0f07208896b4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞