Redis面试那些事儿,技巧经验乱七八糟全都给你凑齐了
- 问答
- 2026-01-11 02:25:58
- 6
开场白别傻乎乎的光说“我用过Redis”
面试官问你Redis,你别一上来就“我用过缓存”、“我做过持久化”,这太笼统了,跟没说一样,你得准备几个有血有肉的场景。
你可以这么说:“在我上一个项目里,我们有个活动页面,瞬时访问量特别大,数据库根本扛不住,我当时负责引入Redis做缓存,把活动商品信息、用户秒杀资格这些都预热到Redis里,用的是Hash结构存商品详情,用String类型存库存,还用了Set来存每个用户的黑名单防止重复抢购,最后顶住了每秒大概几万QPS的请求。”
你看,这么一说,面试官立刻就能捕捉到几个关键词:高并发场景、具体数据结构(Hash, String, Set)、解决了什么问题(抗住高QPS),这比你干巴巴地说“我用Redis做缓存”强一百倍。
数据结构别只背名字,得说“为啥用这个”
这是重灾区,很多人能把五种基础数据类型背得滚瓜烂�,但一问为啥用就傻眼,你得结合业务说。
- String(字符串):最基础的,别说只能存字符串,数字也行啊,场景:缓存用户信息(序列化成JSON字符串)、计数器(文章点赞数,用INCR命令,原子性,不会超卖)、分布式锁(SETNX命令,虽然现在有更高级的,但这个是基础)。
- Hash(哈希):别说就是个对象,场景:存一个对象的多个字段,比如用户信息(userId作为key,field是name, age等),为啥不用String整个存?因为更新单个字段时,Hash可以只操作那个field,而String要序列化整个对象、修改、再序列化写回去,节省网络开销。
- List(列表):别说就是个链表,场景:消息队列(LPUSH生产消息,RPOP消费消息,但不够完善)、最新文章列表(LTRIM可以固定列表长度,只保留最新的100条)。
- Set(集合):自动去重是核心,场景:共同好友(SINTER命令求交集)、抽奖活动(SPOP随机弹出元素,保证不重复中奖)。
- Sorted Set(有序集合):带分值的Set,场景:排行榜(ZADD添加分数,ZREVRANGE按分数倒序获取)、延迟队列(用时间戳作为score,定时获取)。
持久化问题,别只说AOF和RDB,要说怎么选和怎么挂的
面试官必问持久化,你别光解释RDB是快照,AOF是日志,你得说出人话,并且暴露你思考过。
- RDB(快照):你就说这好比是“拍照片”,隔一段时间拍一张全量数据的照片,优点是恢复快,文件小,缺点是可能会丢最后一次“拍照”之后的数据。
- AOF(日志):你就说这好比是“记日记”,把每个写命令都记下来,优点是数据安全,最多丢一秒的数据(如果配置为每秒同步),缺点是文件大,恢复慢。
关键来了:你得说你怎么选。“我们当时是缓存场景,对数据丢失不那么敏感,但要求性能高,所以用的是RDB,但如果是什么订单、支付这些核心数据,我们肯定会用AOF,或者两者结合用。” 这样显得你有权衡。
更狠的是,你可以主动提一下“数据恢复流程”:“如果Redis挂了,重启时会先加载AOF文件来恢复,因为AOF通常数据更完整。” 这个细节很多只知道概念的人说不出来。
缓存问题,这才是体现你水平的地方
- 缓存穿透:你解释为“查一个根本不存在的数据,每次都怼到数据库上。” 解决方案别说太学术,就说“1. 接口层做校验,非法ID直接拦掉;2. 即使数据库查不到,也往Redis里存个空值(比如null),并设个短的过期时间,下次再来就直接返回空了。”
- 缓存击穿:你解释为“一个热点key突然过期了,大量请求同时涌向数据库,把它打穿了。” 解决方案:“用分布式锁,只有一个请求能拿到锁去数据库查数据,然后回填缓存,其他请求等着。” 你可以提一嘴SETNX命令或者用更专业的Redisson库。
- 缓存雪崩:你解释为“大量的key在同一时间过期,或者Redis集群挂了,导致所有请求都砸向数据库。” 解决方案:“1. 给过期时间加个随机值,别让它们同时失效;2. 做Redis的高可用集群,比如哨兵模式或者集群模式,防止全盘崩溃。”
一些杂七杂八的加分项和坑
- 内存淘汰策略:当内存满了,Redis怎么办?别只说LRU(最近最少使用),可以说“我们一般配置
allkeys-lru,从所有key中挑最近最少用的淘汰,如果是缓存场景,用这个就行。” - 热点Key问题:如果一个Key特别热,比如顶流明星出轨,所有人都来读他的一条微博,这个Key所在的Redis实例压力会很大,解决方案?“我们当时是把这个Key做副本,比如
weibo:10001:1,weibo:10001:2,然后在客户端随机选一个来读,把压力分散开。”这叫本地缓存+分片的思路。 - 事务:Redis的事务(MULTI/EXEC)不像数据库的事务,它不保证原子性,中间命令出错不会回滚,你可以提一下“Redis事务更像是打包一批命令按顺序执行。”
- 最后的大杀招——主动承认不足:如果面试官问到一个你不会的,比如Redis的集群数据分片原理(哈希槽),你别瞎编,你可以说:“这个底层细节我了解得不是很深,我知道它是通过哈希槽来分片的,数据会分布在不同节点上,但具体的迁移和容错机制我没有深入研究过,不过我猜它应该是为了保证数据均匀分布和高可用,如果我需要用到,我会很快去学习。” 诚实比不懂装懂强一万倍。
Redis面试别怕,它不像JVM、并发那样底层,它很实用,你就把你用它干过的事儿,怎么想的,踩过什么坑,怎么解决的,像讲故事一样说出来,面试官就会觉得你是个有经验的实干派。

本文由称怜于2026-01-11发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/78425.html
