mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
1315 字
3 分钟
Redis 核心面试题:缓存三剑客、双写一致性、分布式锁与集群架构

Redis缓存问题#

缓存穿透#

原理#

比如有人得到你的请求路径,恶意伪造请求攻击你的数据库

布隆过滤器可能会存在误判 在布隆过滤器的具体实现中可以设置误判率,一般设置在百分之五以内

回答#

缓存击穿#

原理#

回答#

缓存雪崩#

原理#

回答#

总结#

双写一致性#

强一致性#

先删除缓存再操作数据库#

正常情况 非正常情况,可能会出现数据不一致问题

先操作数据库再删除缓存#

正常情况 非正常情况 当线程一恰好查到过期的缓存,查数据库,此时线程二还未操作数据库,线程一拿到的是旧数据,也会把旧数据写入缓存,造成缓存和数据库数据不一致

因此两种操作都会导致数据不一致#

延时双删#

读写锁对比分布式锁#

左边为使用分布式锁,只有一个线程得到锁才可以继续操作 因此效率低下 而右边是读写锁,效率较高 读锁 写锁

注意获取的是同一把锁 因为会阻塞其他线程,因此性能比较低下,只推荐强一致性使用

对一致性要求不严格的场景#

由于使用的消息中间件,所以必定有延迟

回答#

Redis持久化问题#

RDB#

linux中,进程无法直接操作物理内存,只能操作虚拟内存,通过页表将对虚拟内存的操作映射到物理内存中

AOF#

Redis过期策略#

惰性删除#

即使用的时候判断一次

定期删除#

回答#

Redis淘汰策略#

原理#

总结#

分布式锁#

抢券场景超卖问题#

正常情况 出现超卖 线程一和线程二查询的时候都是1,两个都减去一个,那么库存变成-1,即出现了超卖问题

互斥锁#

使用互斥锁 但互斥锁只能在同一个jvm中生效,如果多台机器同时部署,那么无法获得同一把锁

分布式锁#

获得的不是同一把锁 使用Redis作为分布式锁

分布式锁原理#

主要要给锁设置过期时间,否则会出现,持有锁的业务宕机了无法释放锁,那么其他线程只能等待,会造成死锁问题#

同时还有锁的过期时间设置,根据业务时间预估是不可行的,比如网络波动都会影响,因此需要给锁续期,可以开启一个新的线程监视,redis已经帮我们实现了这样的锁#

分布式锁Redisson#

redisson的重试机制并不是一直循环等待 如果自己设置了锁的存在时间,那么看门狗机制就不会生效#

lua脚本保证执行命令的原子性#

Redisson可重入锁#

同一个线程可以重复获取同一把锁 每次获取一次锁value+1,释放一次锁value-1

Redisson主从一致性#

当写入从主节点获取锁时,主节点宕机那么redis的哨兵机制会重新推举出一个主节点,此时一个新的线程来获取锁可以成功,那么锁的互斥性就失效了,可能会出现脏数据问题#

使用zookeeper可以实现分布式锁的强一致性#

总结#

Redis集群方案#

主从复制#

原理#

回答#

哨兵模式#

原理#

主从模式一写多读,无法解决Redis的高可用问题

脑裂问题#

正常模式下,主从节点处于一个网络下,可以正常监控 假如网络出现问题,哨兵无法监测主节点,主节点也没有宕机,那么此时哨兵会从从节点中推举出一个主节点,此时有两个主节点,即脑裂 网络恢复后,老的master节点会被降级成为slave几点,此时从新的master节点同步数据,老的master会清空自己的数据,但之前脑裂客户端也向老master节点写入数据,导致数据丢失 通过这两个配置,达不到这样的要求,则拒绝客户端的写入请求,防止大量数据丢失

回答#

分片集群#

原理#

有很多个master节点,每个master节点又附带一些slave节点

如果想要一些业务相关的key放到一个master,那么就可以对key设置一样的有效部分,例如右侧的aaa

回答#

分片集群解决了海量数据存储,高并发写的问题,同时也有哨兵模式的自动推举master

Redis单线程为什么还快#

用户空间与内核空间#

阻塞IO#

非阻塞IO#

这种效率也不高

IO多路复用#

Redis网络模型#

加入了两个多线程,降低了网络IO

总结#

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Redis 核心面试题:缓存三剑客、双写一致性、分布式锁与集群架构
https://xinrose.top/posts/interview/redis/
作者
xinRose
发布于
2026-08-22
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

相关文章 智能推荐
1
操作系统核心面试题与核心知识点总结
面试 全面系统梳理操作系统高频面试题:进程与线程、上下文切换、进程通信与线程同步、死锁与饥饿、I/O 多路复用(select/poll/epoll)、物理内存与虚拟内存、分段分页与页面置换算法、系统调用与内核态/用户态等核心机制。
2
计算机网络核心面试题与协议全景解析
面试 深入剖析计算机网络高频面试题:OSI 与 TCP/IP 体系架构、输入 URL 到页面渲染完整链路、DNS 解析流程、TCP 三次握手与四次挥手、可靠传输保障与流量/拥塞控制机制、TCP vs UDP、ARP 协议、HTTP 报文与 HTTPS 安全加密、Cookie 与 Session、常见 HTTP 状态码等核心考点。
3
Java 框架篇面试题:Spring、Spring Boot 与 MyBatis 核心解析
面试 全面解析 Spring 单例 Bean 线程安全、AOP 实践、声明式事务及失效场景、Bean 生命周期、三级缓存循环依赖、Spring Boot 自动配置与启动流程、MyBatis 延迟加载与缓存机制。
4
JVM 面试题核心汇总与实战解析
面试 全面整理 JVM 核心面试题:JVM 内存组成(堆、栈、方法区/元空间)、类加载机制与双亲委派、垃圾回收算法与 GC 收集器、JVM 调优参数与 OOM/CPU 飙高排查思路。
5
Java 多线程与并发编程核心面试题精讲
面试 深入剖析线程与进程、线程状态机与生命周期、wait/sleep/notify、Synchronized 锁升级原理(偏向锁/轻量级锁/重量级锁与 MarkWord)、JMM 内存模型、CAS 与原子操作。

目录