Redis核心知识点与高频面试题解析
1. Redis面试高频题解析Redis作为当前最流行的内存数据库之一几乎成为后端开发岗位面试的必考内容。根据笔者多年面试经验和技术社区统计以下问题在Redis相关面试中出现频率最高掌握这些核心知识点能帮助你在技术面试中脱颖而出。1.1 Redis基础特性QRedis为什么这么快Redis的卓越性能源于其精巧的架构设计纯内存操作数据存储在内存中读写速度远超磁盘数据库单线程模型避免多线程上下文切换和锁竞争6.0版本后引入多线程IOIO多路复用基于epoll/kqueue实现的高效事件驱动模型高效数据结构专门优化的数据结构实现如ziplist、quicklist等QRedis适合哪些场景典型应用场景包括高频访问缓存减轻数据库压力会话缓存Session存储排行榜/计数器Sorted Set消息队列Stream/List分布式锁SETNX社交关系Set交并差运算1.2 数据类型与内部实现QRedis支持哪些数据类型Redis 5种核心数据结构String最基础类型可存文本、数字或二进制数据Hash字段值映射表适合存储对象List双向链表支持阻塞操作Set无序唯一集合支持交并差运算Sorted Set带权重的有序集合特殊数据结构Bitmap位操作HyperLogLog基数统计Geospatial地理位置QString类型的底层实现Redis的String并非简单字符数组而是采用SDS(Simple Dynamic String)结构struct sdshdr { int len; // 已用长度 int free; // 剩余空间 char buf[]; // 字符数组 };优势O(1)时间复杂度获取长度自动扩容且减少内存分配次数二进制安全可存储任意数据2. Redis持久化机制2.1 RDB持久化QRDB的工作原理RDB通过快照方式持久化执行SAVE阻塞或BGSAVE后台命令fork子进程进行数据快照将内存数据写入临时RDB文件替换旧RDB文件优点二进制紧凑恢复速度快适合灾难恢复最大化Redis性能缺点可能丢失最后一次快照后的数据大数据量时fork操作可能阻塞主线程2.2 AOF持久化QAOF的三种写回策略always同步写回每个命令都fsync到磁盘最安全但性能最低everysec每秒写回默认配置平衡安全与性能no由操作系统决定性能最好但可能丢失1秒以上数据QAOF重写过程fork子进程扫描内存数据生成新的AOF临时文件期间新命令写入AOF缓冲区和重写缓冲区重写完成后追加缓冲区的命令原子替换旧AOF文件3. Redis集群方案3.1 主从复制Q主从复制流程从节点执行SLAVEOF命令主节点执行BGSAVE生成RDB传输RDB文件到从节点从节点加载RDB主节点持续传播写命令关键参数repl-backlog-size 1mb # 复制积压缓冲区 repl-timeout 60 # 复制超时时间3.2 Redis ClusterQ数据分片原理采用哈希槽(16384 slots)分片每个键通过CRC16算法映射到槽位节点负责部分槽位支持重新分片reshardingQ集群如何保证高可用主从切换当主节点下线从节点自动晋升Gossip协议节点间状态传播故障检测通过PING/PONG消息4. Redis高级特性4.1 内存淘汰策略当内存达到maxmemory时触发volatile-lru从过期集合中淘汰最近最少使用allkeys-lru从所有key中淘汰LRUvolatile-ttl淘汰即将过期的keynoeviction禁止淘汰默认配置示例maxmemory-policy volatile-lru maxmemory 4gb4.2 事务机制QRedis事务的特点通过MULTI/EXEC命令组合不支持回滚与关系型数据库不同保证顺序性和隔离性可能被WATCH命令中断典型问题WATCH key MULTI SET key value EXEC # 如果key被修改此处返回nil5. 生产环境优化建议5.1 性能调优合理设置maxmemory和淘汰策略禁用THP透明大页echo never /sys/kernel/mm/transparent_hugepage/enabled优化Linux内核参数vm.overcommit_memory 1 net.core.somaxconn 10245.2 监控指标关键监控项内存使用率used_memory命中率keyspace_hits/keyspace_misses持久化延迟rdb_last_bgsave_status复制延迟master_repl_offset推荐工具redis-cli --statredis-benchmarkPrometheus Grafana监控6. 常见问题排查6.1 缓存雪崩现象大量key同时过期导致请求直接打到数据库解决方案差异化过期时间基础时间随机值永不过期后台更新策略熔断降级机制6.2 缓存穿透现象查询不存在的数据绕过缓存解决方案布隆过滤器拦截空值缓存设置短TTL接口层校验6.3 缓存击穿现象热点key过期瞬间大量并发请求解决方案互斥锁重建缓存逻辑过期value中包含过期时间永不过期策略7. Redis6/7新特性7.1 Redis6多线程IO默认禁用需配置io-threads 4 io-threads-do-reads yes仅网络IO多线程命令执行仍单线程性能提升30%~50%7.2 Redis7新功能Multi-part AOFAOF拆分为多个文件Sharded-pubsub分片发布订阅Function API服务端脚本管理提示生产环境升级前务必充分测试注意兼容性问题