1.什么是缓存击穿?
说明:缓存击穿是在高并发的系统中查询一个redis缓存中刚刚失效的key,导致大量查询直接到了数据库,造成数据库压力太大。
解决方案:
双重检索机制,在高并发的情况下,保证同一时间内只有一个线程去访问数据库,读取数据再回写到redis中,其他线程阻塞等待,当其他线程获取到了锁的时候,再去redis中查询是否存在这个key,存在这个key则直接返回。
2.什么是缓存穿透?
说明:缓存穿透是用户在不断的请求访问一个redis和数据库都不存在的数据。
解决方案:
1、回写机制,将不存在的key设置null值回写到redis中,但是存在一个问题,如果是恶意的攻击,会导致设置成null值的key会很多。
2、使用布隆过滤器(推荐),由一个位图数组和N个哈希函数构成,将所存数据通过哈希算法计算得到一个哈希值,再将值对位图取模,将每个哈希值在位图的所在位置都设置成1,但是存在误判的可能,但可以解决缓存穿透的问题。
3.什么是缓存雪崩?
说明:同一时间有大量的缓存数据失效或者redis服务宕机,同时又有大量的数据来进行访问,导致数据库压力突然增大,导致系统崩溃。
解决方案:
1.限流+服务降级处理,均匀设置过期时间
2.redis主从复制+哨兵模式+redis持久化
3.设置热点数据永不过期