一、Redis为什么快得离谱?(必考题)
面试官最爱问的送命题!你以为背个"单线程+内存操作"就完事了?年轻人,这样回答会被扣分的!关键要拆解这三个核心机制:
-
IO多路复用(划重点)
单线程处理网络IO却能扛百万并发,靠的就是epoll
系统调用!举个栗子:快递驿站老板(Redis)不用挨个查快递(请求),快递到了自动亮灯通知,效率直接起飞! -
内存闪电战
直接内存操作比磁盘快100倍不说,Redis还搞了内存池预分配。执行set user:1001 "张三"
时,直接从内存池拿空间,连malloc都省了! -
数据结构黑科技
Redis的zset底层用了跳表+哈希表双结构,插入/查询都是O(logN)。你以为的简单KV存储,其实藏着数据结构优化的超级大招!
(敲黑板)单线程优势是避免上下文切换,但新版Redis 6.0开始支持多线程处理网络IO,这个知识点最近面试出现的频率暴涨300%!
二、持久化机制:RDB和AOF的相爱相杀
2.1 RDB快照实战配置
# 900秒内至少1次写操作触发
save 900 1
# 使用LZF压缩算法(省空间但耗CPU)
rdbcompression yes
突然宕机可能丢失最后5分钟数据,适合做冷备。生成rdb文件时会fork子进程,如果内存太大…嘿嘿,准备好你的服务器卡顿预案吧!
2.2 AOF的三大写回策略
- Always:每个写操作都刷盘(数据安全但性能扑街)
- Everysec:每秒批量写入(推荐方案)
- No:交给操作系统决定(数据说没就没)
(血泪教训)AOF重写时会用新进程生成临时文件,如果同时触发RDB和AOF重写,小心你的磁盘IO被打满!记得监控aof_rewrite_in_progress
指标!
三、集群方案选型:主从复制 vs Sentinel vs Cluster
3.1 主从复制连环坑
# 从节点配置
replicaof 192.168.1.100 6379
# 开启只读模式
replica-read-only yes
看起来简单?网络抖动时可能触发全量同步!复制缓冲区太小会导致频繁同步,记得调大client-output-buffer-limit replica
参数!
3.2 Redis Cluster的槽位玄学
16384个槽位分配到各个节点,为什么不是65536?官方说是因为心跳包大小和集群规模的最佳平衡!迁移数据时用CLUSTER ADDSLOTS
命令,但运维时建议用redis-trib.rb
工具自动分配。
(高频考点)客户端如何路由请求?MOVED错误重定向和ASK临时重定向的区别一定要说清楚!这题答错直接暴露你是背题党!
四、缓存穿透/雪崩/击穿:连环夺命三兄弟
4.1 缓存穿透的七种武器
- 布隆过滤器(存在误判率)
- 空值缓存(记得设置短过期时间)
- 接口鉴权(拦截恶意请求)
- 热点参数限流(比如用Hystrix)
- 缓存预热(双十一必备)
- 互斥锁排队(并发高慎用)
- 异步更新(结合消息队列)
4.2 雪崩事故现场还原
某电商设置所有商品缓存2小时过期,结果到期瞬间请求直接打爆数据库…正确姿势应该是:基础过期时间+随机抖动(比如±300秒),或者采用二级缓存策略。
(避坑指南)别以为用Redisson的tryLock
就能解决所有问题!分布式锁要考虑锁续期、自动释放、可重入性,搞不好就是死锁连环车祸现场!
五、实战场景题:用Redis设计微博热搜榜
面试官最爱出的场景题!用zset实现实时热搜榜:
ZINCRBY hotsearch:202405 1 "某明星离婚"
ZREVRANGE hotsearch:202405 0 9 WITHSCORES
但真实场景要考虑:
- 数据冷热分离(历史数据存HBase)
- 防刷机制(用Lua脚本做频率限制)
- 词条合并(比如"某明星"和"王某"要归一化处理)
- 突发热点检测(通过zset的score变化率识别)
(进阶技巧)热搜榜的"爆"标签怎么实现?可以用zset的score分段策略,比如超过100万标记为"爆",500万标记为"沸",这些业务规则要封装在服务层!
六、高频考点排行榜(2024最新统计)
根据最近三个月面经整理出的Top5考点:
- Redis事务与MySQL事务的差异(94%出现率)
- 大Key删除方案(用scan渐进式删除)
- 内存淘汰策略(allkeys-lru使用率最高)
- 分布式锁红锁算法争议(官方都不推荐了!)
- Stream数据结构实现消息队列(比Pub/Sub可靠)
(超级重点)Redis单线程为什么不用多线程?这个问题在2023年答案要变!Redis6开始支持IO多线程,但是命令执行还是单线程,这个知识点已经坑了无数面试者!
七、面试反杀技:向面试官提问的艺术
最后5分钟的提问环节,问这些让你加分:
- “咱们业务中Redis的QPS峰值是多少?遇到过bigkey问题吗?”
- “集群版本用的是Codis还是官方Cluster方案?”
- “有没有遇到缓存与数据库一致性的棘手case?”
- “未来有计划迁移到KeyDB或DragonflyDB吗?”
记住:面试是双向选择,高手过招要见招拆招!准备好你的Redis实战经历,用真实案例征服面试官,offer还不是手到擒来?