Redis经典面试大全(2025最新版)_redis 面试
Redis经典面试大全(2025最新版)
一、Redis基础概念
1. Redis是什么?
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值数据库,支持多种数据结构,可用作数据库、缓存和消息中间件。主要特点包括:
- 基于内存操作,读写性能极高
- 支持持久化,可将内存数据保存到磁盘
- 支持主从复制和高可用集群
- 提供丰富的数据结构和操作命令
2. Redis为什么这么快?
- 内存操作:数据存储在内存中,访问速度比磁盘快几个数量级
- 单线程模型:避免多线程上下文切换和锁竞争
- IO多路复用:使用epoll/kqueue等机制实现高效网络通信
- 高效数据结构:专门优化的数据结构实现(如SDS、跳跃表等)
二、Redis数据结构与实现
1. 五种基本数据类型及使用场景
2. 特殊数据类型
- BitMap:二值统计(签到、在线状态)
- HyperLogLog:基数统计(UV统计)
- GEO:地理位置(附近的人)
- Stream:消息流(替代Kafka)
3. 底层数据结构实现
- String:SDS(简单动态字符串),支持动态扩容和二进制安全
- List:3.2版本前使用ziplist或linkedlist,3.2后统一使用quicklist
- Hash:ziplist(元素少时)或hashtable
- Set:intset(整数集合)或hashtable
- ZSet:ziplist或skiplist+dict组合
三、Redis持久化机制
1. RDB与AOF对比
2. 混合持久化(Redis 5.0+)
结合RDB和AOF优势,生成的文件前半部分是RDB格式,后半部分是AOF日志
四、Redis高可用架构
1. 主从复制
- 作用:数据冗余、读写分离、故障恢复
- 同步过程:
- 全量同步:从节点初次连接时,主节点生成RDB发送给从节点
- 增量同步:主节点将写命令发送给从节点
2. 哨兵模式(Sentinel)
- 功能:监控、自动故障转移、配置中心
- 故障检测:
- 主观下线:单个哨兵认为节点不可用
- 客观下线:多个哨兵确认节点不可用
3. Redis Cluster
- 数据分片:16384个slot,每个节点负责部分slot
- 优点:支持海量数据存储和高并发写
- 限制:不支持跨slot事务,多key操作需使用hash tag
五、Redis缓存问题与解决方案
1. 缓存穿透
- 现象:查询不存在的数据,绕过缓存直接访问数据库
- 解决方案:
- 布隆过滤器拦截
- 缓存空对象(设置短过期时间)
2. 缓存击穿
- 现象:热点key过期瞬间,大量请求直接访问数据库
- 解决方案:
- 互斥锁(如Redis分布式锁)
- 热点数据永不过期
3. 缓存雪崩
- 现象:大量key同时过期,导致请求直接访问数据库
- 解决方案:
- 设置随机过期时间
- 多级缓存
- 熔断降级机制
六、Redis内存管理
1. 过期键删除策略
- 惰性删除:访问时检查是否过期,过期则删除
- 定期删除:定时随机检查并删除过期键
2. 内存淘汰策略
七、Redis高级特性
1. 事务
- 特点:不支持回滚,命令执行失败后继续执行后续命令
- 命令:MULTI(开始)、EXEC(执行)、DISCARD(取消)、WATCH(监控)
2. 分布式锁
- 实现方式:SETNX + EXPIRE
- 注意事项:
- 设置唯一value防止误删
- 合理设置锁超时时间
- 使用Lua脚本保证原子性
3. 管道(Pipeline)
- 作用:批量执行命令,减少网络往返时间
- 限制:不保证原子性
八、Redis性能优化
1. 关键优化点
- 合理设置maxmemory和淘汰策略
- 使用Pipeline减少网络IO
- 避免大key(单个key数据过大)
- 选择合适的数据结构
- 合理设置持久化策略
2. 大Key处理
- 危害:阻塞请求、内存不均、网络拥塞
- 解决方案:
- 拆分大key
- 使用SCAN系列命令替代KEYS
- 使用hash分片存储
九、Redis与其他技术对比
1. Redis vs Memcached
十、Redis实战经验
1. 热点数据发现与预热
- 监控key访问频率
- 低峰期预加载热点数据
- 使用LFU淘汰策略
2. 分布式ID生成
- 利用Redis原子操作INCR/INCRBY
- 结合时间戳+机器ID+序列号
3. 延迟队列
- 使用ZSet,score为执行时间戳
- 定时扫描到期任务
以上内容综合了Redis的核心知识点和常见面试问题,覆盖了从基础概念到高级特性的全方位内容。建议结合具体业务场景深入理解这些概念,并在实际项目中应用相关解决方案。