Redis相关面试题

场景:高并发(大量)请求,先访问缓存,后访问数据库
缓存穿透:redis和数据库都没查到
缓存击穿:缓存没查到,数据库查到了
缓存雪崩:雪崩==redis或数据库宕机

缓存穿透
场景:
用户查询id为-1的数据
黑客强行破解密码
一般是收到黑客攻击,所以应该监控,及时添加黑名单
解决方法
方法1、从缓存出发,数据库中不存在,在缓存中创建一个空对象返回给用户(代码维护简单,但是效果不是很好)
此时的空对象要设置过期时间:redisCache.put(Integer.toString(id), null, 60) //过期时间为 60s
方法2、使用缓存自带的布隆过滤器(代码维护比较复杂,效果挺好的)

缓存击穿
场景:
1、一个冷门key,突然被大量用户访问
2、一个热门key,在缓存中时间刚好过期,大量用户并发访问
解决方法
单机环境下:直接使用常用的锁即可(如:Lock、Synchronized等)
分布式环境下可以使用分布式锁,如:基于数据库、基于Redis或者zookeeper 的分布式锁

缓存雪崩
场景
1、redis宕机
2、在某一段时间,缓存集中失效,大量请求造成数据库宕机
解决方法
1、redis高可用,搭建redis集群,一主多从或者多主多从
2、限流降级,通过加锁或队列来控制读数据写缓存的线程数量,其他线程等待
3、数

你可能感兴趣的:(面试,redis,数据库,缓存)