redis缓存穿透以及缓存雪崩
缓存穿透的原因及解决方法
原因: 用户查询的key不存在,对应的id在数据库也不存在,此时非法用户进行攻击,大量的请求会打在db上,造成宕机从而影响整个系统,这种现象称为缓存穿透。本质就是请求不存在的key绕开redis的缓存层。
方法一: 将空数据也缓存起来,比如空字符串和空对象空数组或list。
方法二: 布隆过滤器。实际上就是一个bit数组。
redis缓存雪崩的原因以及解决方法:
原因: 缓存中的数据大批量失效,然后这个被使用的数据又有大批量的请求进来。但是此时由于redis中的key全部失效了,导致所有的请求直接打到db上,造成宕机。本质就是缓存失效造成热点key的请求没有命中redis的缓存层。
方法一: 设置对应热点key永不过期。
方法二: 过期时间错开,比如过期时间采用随机生成,并且热点数据过期时间设置长一点,非热点数据设置短一点。
方法三: 多缓存结合,先请求redis,redis无再请求memcache,如果都没命中再去请求db。
方法四: 当然是使用第三发提供的redis服务器啦。