发生原因:
当用户大量请求redis时,redis中找不到对应的数据,redis就可能会发生穿透、击穿、雪崩的情况
后果:
redis做缓存时,发透、生穿击穿、雪崩后,用户请求会直接请求DB,可能会给DB带来巨大压力,造成服务器宕机等
解释:
缓存穿透:大量请求不存在的key
缓存雪崩:大量的key过期
缓存击穿:一个key过期,但是用户大量请求这个key
解决方案:
缓存穿透:
方法1.接口拦截,对于不合理、特殊字符、频繁的无效请求做直接拦截
方法2.对指定key进行空值缓存,例如key=1022,value=null,避免请求直接打靶到DB数据库
缓存雪崩:
方法1.过期时间通过随机数生成,避免集体某一个时间同时过期
方法2.添加监测功能,实时调整key的过期时间
缓存击穿:
方法1.使用互斥锁,互斥锁也是线程同步的一种机制,当redis中的一个key过期后,同一时间只有一个请求能访问指定的DB资源并返回给redis
方法2.添加监测功能,实时调整key的过期时间