Redis面试高频灵魂9问(附赠防挂指南)

一、Redis为什么能抗住百万并发?(必考题)

老铁们先记住这个公式:单线程+多路复用=性能怪兽!!!(这个组合拳打得MySQL直喊疼)Redis基于内存操作不用说了吧?但最骚的是它的单线程模型,完全避免了线程切换的开销。配合epoll这种IO多路复用技术,一个线程就能处理成千上万的连接请求。这就是为什么Redis单机就能轻松扛住10W+ QPS的秘诀!

二、数据类型全家桶怎么用才专业?

面试官就爱问这个!我当年就被连环追问过:

  • String:不只是存字符串!分布式锁(setnx命令)、计数器(incr命令)都是它的骚操作
  • Hash:电商购物车场景必备(用户ID+商品ID+数量三层结构)
  • List:消息队列(注意不是专业的MQ!)、最新消息排行
  • Set:共同好友计算(sinter命令直接起飞)、抽奖去重
  • ZSet:实时排行榜(带权重的排序简直不要太爽)

(面试加分项)突然压低声音说:“其实我们项目用HyperLogLog做UV统计,误差不到1%,内存省了20倍!”

三、持久化双雄对决:RDB vs AOF

这是道送命题!搞混了直接凉凉:

RDBAOF
持久化方式内存快照操作日志追加
数据安全可能丢失最后一次保存最多丢失1秒数据(appendfsync配置)
恢复速度快得一匹慢得像蜗牛
文件大小小(二进制压缩)巨大(可重写优化)

(血泪教训)有次线上用RDB每小时保存,结果服务器突然宕机,丢了55分钟数据!现在都是RDB+AOF混合持久化(Redis4.0+新特性),真香!

四、缓存三连击:穿透、雪崩、击穿

这三个坑我全踩过!画个表格说清楚:

现象原因必杀技实战解决方案
穿透查不存在的key布隆过滤器(记得用redisson的实现)缓存空对象+短过期时间
雪崩大量key同时过期随机过期时间集群部署+热点数据永不过期
击穿热点key突然失效互斥锁(分布式锁要慎用!)永不过期+逻辑过期时间双保险

(防坑指南)上次用互斥锁解决击穿,结果死锁了!后来改用redisson的看门狗机制才解决,切记锁的过期时间要大于业务执行时间!

五、主从复制暗藏玄机

你以为配个slaveof就完事了?大错特错!

  • 全量复制:master生成RDB时,新写入的命令会存到复制缓冲区(太小会触发二次全量复制!)
  • 增量复制:基于offset的断点续传(网络闪断救星)
  • 星型架构:一主多从建议用树状结构,避免master网络带宽被打满

(骚操作)线上遇到过从节点卡死,后来发现是master的repl-backlog-size设置太小,改成100MB后稳如老狗!

六、哨兵模式真的可靠吗?

用过哨兵的都知道这三个致命问题:

  1. 选举期间服务不可用(脑裂警告!)
  2. 故障转移可能丢数据(异步复制惹的祸)
  3. 集群规模受限(超过5个节点就头大)

所以现在都推荐Redis Cluster!但面试官就爱问这个,记住这三个重点:

  • 主观下线和客观下线的区别
  • 哨兵之间用gossip协议通信
  • 故障转移时的leader选举算法(Raft变种)

七、Redis事务是鸡肋吗?

先说结论:事务不能回滚(惊不惊喜?)但multi/exec命令在以下场景真香:

  • 批量操作减少网络开销(比如秒杀扣库存+记录日志)
  • watch命令实现乐观锁(比MySQL的for update轻量多了)
  • Lua脚本才是真·原子操作(官方推荐玩法)

(血案重现)曾经用事务处理库存,结果发现ABA问题!后来改用Lua脚本才解决,切记事务里的命令要幂等!

八、内存淘汰策略怎么选?

当内存到达maxmemory时,这8种策略让你怀疑人生:

  • allkeys-lru:最常用(但要注意冷数据突然变热)
  • volatile-lfu:更精准的计数(4.0+版本专属)
  • allkeys-random:适合随机访问场景
  • noeviction:直接报错(生产环境慎用!)

(调优经验)曾经用allkeys-lru导致最近登录的用户数据被删!后来改用volatile-lru,给常驻数据设置永久过期时间完美解决。

九、Cluster集群的槽位玄学

这是面试终极BOSS!必须掌握:

  • 16384个哈希槽(为什么不是65536?因为作者说够用了…)
  • 节点通信采用gossip协议(比哨兵更高效)
  • 跨槽操作要用hash tag(比如{user1000}.order)
  • 迁移数据时的ASK重定向机制

(实战踩坑)迁移槽位时客户端报MOVED错误?这是正常现象!要用asking命令配合重试,记得升级客户端版本!

防挂指南(救命稻草)

最后送大家三个保命锦囊:

  1. 被问原理时,先画架构图再说细节(面试官就爱看这个)
  2. 回答场景题要遵循:场景->问题->方案->优化的套路
  3. 遇到不会的题,就聊类似问题的解决思路(比如把击穿问题解法迁移到雪崩)

记住,Redis面试本质是考系统设计能力!把这些原理和实战经验融会贯通,offer还不是手到擒来?冲就完事了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值