上周帮朋友复盘阿里技术面,他直接心态崩了!
面试官问:Redis要执行多条命令,有哪些方式?秒杀场景选哪种?
他张口就答:用Pipeline批量发。
结果面试官连环追问:
秒杀扣库存要**原子性**,Pipeline能保证吗?
用事务还是Lua脚本?
他当场卡壳,只背了方案名,不懂业务适配,直接被判定无实战经验,一面凉凉。
Redis多命令执行是阿里/字节/腾讯必考题,
考的不是你背命令,而是效率与原子性的平衡,
选不对方案,线上直接超卖、数据错乱!
今天拆透4种方案+真实场景,给你面试满分模板,大厂面试直接通关!
🔥 大厂为啥死磕Redis多命令执行?
这不是语法题,是业务架构+实战经验综合题,面试官就看2点:
- 能不能平衡效率(减少网络往返)和原子性(命令全成/全败)
- 会不会结合秒杀、转账、数据同步真实场景选方案
💡 选方案先抓核心:2个刚需
所有多命令执行,都围绕这两个需求设计:
- 提效率:批量发命令,减少网络往返,延迟直降90%
- 保原子性:多条命令要么全成功,要么全失败,杜绝中间状态
4种方案+业务场景,吃透秒懂
方案1:批量命令(MSET/MGET)—— 同类型命令提效
适用场景:电商批量缓存商品信息(纯字符串/哈希同类型操作)
核心:Redis原生支持,1次网络往返,天然原子
局限:只能用同类型命令,不能混合字符串+哈希
一句话:同类型批量操作,首选它,简单又高效!
方案2:Pipeline(管道)—— 混合命令提效,不保原子
适用场景:凌晨数据同步、缓存初始化(无需原子性)
核心:支持混合命令,1次网络往返,效率拉满
致命坑:不保证原子性,执行中会插入其他命令,秒杀绝对不能用!
一句话:只求快、不要求原子,用Pipeline!
方案3:事务(MULTI/EXEC)—— 简单原子,无逻辑判断
适用场景:金融转账(扣A钱+加B钱,无复杂判断)
核心:EXEC执行时原子性,不被其他命令打断
局限:不支持逻辑判断,运行时错误不回滚,没法查余额再扣款
一句话:简单原子、无判断,用事务!
方案4:Lua脚本—— 复杂原子,秒杀/分布式锁必选
适用场景:电商秒杀(查库存→扣库存→记用户,必须原子+逻辑判断)
核心:整个脚本视为1条原子命令,支持逻辑判断,杜绝超卖/重复下单
优势:解决Pipeline、事务都搞不定的秒杀核心问题
一句话:秒杀、分布式锁等复杂原子场景,只用Lua!
阿里面试满分答案(直接背)
“Redis执行多条命令有4种方案,核心按效率+原子性选型:
- 批量命令:同类型操作,高效原子,适合批量缓存;
- Pipeline:混合命令提效,不保原子,适合数据同步;
- 事务:简单原子,无逻辑判断,适合金融转账;
- Lua脚本:复杂原子+逻辑判断,秒杀必用,杜绝超卖。
秒杀场景必须用Lua,因为只有它能保证查库存、扣库存、记用户的原子性,Pipeline无法满足原子性要求。”