Redis高频面试题

45 阅读2分钟

缓存穿透

客户端请求的数据在缓存和数据库中都不存在,这样缓存永远不会生效,请求会直接打到数据库。 解决方案:缓存空对象(实现简单,但需要额外内存消耗(增加有效期),造成数据短期不一致)、布隆过滤(在客户端与Redis中增加布隆过滤器,通过布隆过滤器判断key是否在Redis中是否存在)。

缓存雪崩

同一时段内,大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库。 解决方案:给不同的key的TTL添加随机值、利用Redis集群提高服务的可用性、给缓存业务添加降级限流策略(快速失败或拒接服务)、给业务添加多级缓存(nginx、jvm、数据库缓存)

缓存击穿

也称为热点key问题,是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数请求瞬间打到数据库。 解决方案:互斥锁(只有获取互斥锁成功的线程才能重建缓存,获取锁失败的线程阻塞等待)、逻辑过期(存储数据时增加逻辑过期时间,实际永不过期,如逻辑过期并线程获取互斥锁成功,则开启线程查询数据库并重建缓存释放锁;获取失败则直接使用旧数据)

Redis单线程为什么速度这么快

1、命令执行基于内存操作 2、命令执行时单线程操作,避免了多线程频繁上下文切换的开销 3、基于IO多路复用机制提升Redis的I/O利用率 4、高效的数据存储结构:全局哈希表以及多种高效数据结构,比如跳表,压缩列表等等。

Redis线程模型

二进制安全

二进制安全是与字符串操作函数相关的计算机编程术语。一个二进制安全函数本质上将操作输入作为原始的、无任何特殊格式意义的数据流,因此其可以处理一个字符所能有的256种可能的值(假设为8为字符)。