阿里一面挂了!被问Redis多命令执行,我只答Pipeline,面试官:秒杀场景你敢用?

0 阅读3分钟

上周帮朋友复盘阿里技术面,他直接心态崩了!

面试官问:Redis要执行多条命令,有哪些方式?秒杀场景选哪种?

他张口就答:Pipeline批量发

结果面试官连环追问:

秒杀扣库存要**原子性**,Pipeline能保证吗?

用事务还是Lua脚本

他当场卡壳,只背了方案名,不懂业务适配,直接被判定无实战经验,一面凉凉。

Redis多命令执行是阿里/字节/腾讯必考题,

考的不是你背命令,而是效率与原子性的平衡

选不对方案,线上直接超卖、数据错乱!

今天拆透4种方案+真实场景,给你面试满分模板,大厂面试直接通关!

🔥 大厂为啥死磕Redis多命令执行?

这不是语法题,是业务架构+实战经验综合题,面试官就看2点:

  1. 能不能平衡效率(减少网络往返)和原子性(命令全成/全败)
  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种方案,核心按效率+原子性选型:

  1. 批量命令:同类型操作,高效原子,适合批量缓存;
  2. Pipeline:混合命令提效,不保原子,适合数据同步;
  3. 事务:简单原子,无逻辑判断,适合金融转账;
  4. Lua脚本:复杂原子+逻辑判断,秒杀必用,杜绝超卖。

秒杀场景必须用Lua,因为只有它能保证查库存、扣库存、记用户的原子性,Pipeline无法满足原子性要求。”