Redis面试宝典:深入解析核心问题与实战答案,助你轻松应对技术挑战

文章导读
Redis作为高性能的内存数据库,在面试中常被问到持久化机制。Redis的持久化有RDB和AOF两种方式。RDB是定期快照,将内存数据生成二进制文件,适合冷备份,但可能丢失最后一次快照后的数据。AOF是记录写操作日志,重放恢复数据,更安全但文件较大。实际中常结合使用,RDB做全量备份,AOF做增量日志。
📋 目录
  1. Redis数据结构详解
  2. Redis集群模式实战
  3. Redis缓存穿透、雪崩、击穿解决方案
  4. Redis事务与Lua脚本
  5. Redis内存优化技巧
  6. Pub/Sub与Stream消息队列
A A

Redis作为高性能的内存数据库,在面试中常被问到持久化机制。Redis的持久化有RDB和AOF两种方式。RDB是定期快照,将内存数据生成二进制文件,适合冷备份,但可能丢失最后一次快照后的数据。AOF是记录写操作日志,重放恢复数据,更安全但文件较大。实际中常结合使用,RDB做全量备份,AOF做增量日志。

Redis数据结构详解

String是最简单的数据类型,支持字符串、整数、浮点数等。Hash适合存储对象,如用户信息。List用于队列或栈。Set去重集合,ZSet有序集合带分数,常用于排行榜。面试时要能举例说明每个结构的适用场景,比如ZSet的leaderboard实现:ZADD leaderboard 100 "user1",ZRANGE leaderboard 0 9 WITHSCORES。

Redis集群模式实战

Redis Cluster是官方集群方案,使用16384个hash槽分片数据。节点间通过gossip协议通信,心跳检测故障,主从复制高可用。搭建时用redis-cli --cluster create命令指定节点和端口。遇到槽迁移时,用cluster meet和cluster slots命令调整。生产环境建议至少3主3从,避免脑裂。

Redis面试宝典:深入解析核心问题与实战答案,助你轻松应对技术挑战

Redis缓存穿透、雪崩、击穿解决方案

缓存穿透:用布隆过滤器预判不存在key,或缓存空值。缓存雪崩:设置不同过期时间,加入互斥锁。多级缓存如本地+Redis。缓存击穿:热点key用setnx锁,失效前预热。实际代码:用Redisson的RLock lock = redisson.getLock("lockKey"); if(lock.tryLock()){ try{ value = getFromDB(); }finally{lock.unlock();}}

Redis事务与Lua脚本

Redis事务用MULTI/EXEC包围命令,但不支持回滚,只保证原子性。常见问题如WATCH实现乐观锁:WATCH key1 MULTI INCR key1 EXEC。Lua脚本更强大,支持条件判断,EVAL "if redis.call('get',KEYS[1]) then return redis.call('set',KEYS[1],ARGV[1]) else return 0 end" 1 mykey newvalue。脚本原子执行,避免竞态。

Redis内存优化技巧

用内存淘汰策略如allkeys-lru,避免OOM。压缩大key,如大String用hash拆分。大List用多个小list。pipeline批量操作减少RTT。监控info memory,关注used_memory_rss和峰值。实际中设置maxmemory-policy volatile-lru,只淘汰带TTL的key。

Redis面试宝典:深入解析核心问题与实战答案,助你轻松应对技术挑战

Pub/Sub与Stream消息队列

Pub/Sub是传统发布订阅,不持久化,适合实时通知,如PUBLISH channel "msg"。Stream是Redis5.0新功能,支持消费者组,像Kafka。XADD stream * name "alice" XREADGROUP GROUP g1 c1 COUNT 1 STREAMS mystream >。面试常问Stream vs List,Stream支持多消费者和历史消息。

FAQ
Q: Redis单线程为什么这么快?
A: 单线程避免上下文切换,内存操作高效,非阻塞IO用epoll多路复用。
Q: RDB和AOF哪个更好?
A: 结合用,RDB快照备份,AOF日志安全,混合模式RDB-AOF最佳。
Q: 如何防止缓存雪崩?
A: 随机过期时间+熔断限流+多级缓存。
Q: Redis Cluster如何扩容?
A: 添加新节点,用cluster meet加入,rebalance重新分配槽。