news 2026/4/27 23:34:13

精讲面试题Redis事务 vs 管道:一张图看懂区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
精讲面试题Redis事务 vs 管道:一张图看懂区别

Redis事务 vs 管道:一张图看懂区别

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

一句话说清楚

  • 事务:把多个命令打包,按顺序一起执行(但出错不撤销)
  • 管道:把多个命令一次性发出去,减少网络往返(不保证顺序隔离)
  • Lua脚本:真正的原子操作,要么全成功,要么全失败

比喻理解

方式比喻关键点
普通操作去超市:买牛奶 → 回家 → 买鸡蛋 → 回家慢,来回跑
管道去超市:买牛奶 + 买鸡蛋 → 一起回家快,一次买完
事务去超市:说"我要牛奶和鸡蛋" → 店员一起拿给你保证顺序,不会被别人插队
Lua脚本电话订购:说"我要套餐A" → 商家准备好一起送来完整套餐,不会只给一部分

Java代码对比(极简版)

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

1. 普通操作(最慢)

// 普通方式 - 发100次请求for(inti=0;i<100;i++){jedis.set("key_"+i,"value_"+i);// 每次都要:发送→等待→接收}

2. 管道(最快)

// 管道 - 发1次请求Pipelinepipe=jedis.pipelined();for(inti=0;i<100;i++){pipe.set("key_"+i,"value_"+i);// 只是把命令攒起来}pipe.sync();// 一次性发送所有命令

3. 事务(保证顺序)

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

// 事务 - 保证这几个命令连续执行Transactiontx=jedis.multi();// 开始事务tx.set("name","张三");tx.incr("age");// 增加年龄tx.set("status","正常");tx.exec();// 一起执行// 执行期间,不会被其他客户端的命令打断

4. Lua脚本(真正原子性)

// Lua脚本 - 要么全成功,要么全失败Stringscript="local a = redis.call('GET', KEYS[1]) "+"local b = redis.call('GET', KEYS[2]) "+"redis.call('SET', KEYS[1], b) "+"redis.call('SET', KEYS[2], a) "+"return 1";jedis.eval(script,2,"key1","key2");// 原子交换两个key的值

常见问题简单回答

Q1: “事务能保证原子性吗?”

A:不能!Redis事务只是打包执行,中间出错不会回滚。

Transactiontx=jedis.multi();tx.set("a","hello");tx.incr("a");// ❌ 错误:对字符串+1tx.set("b","world");// ✅ 这条还会执行!tx.exec();// 结果:[OK, 错误, OK] ← 第二条错了,第三条仍执行

Q2: “事务和管道区别?”

  • 事务:重点是"顺序执行,不被插队"
  • 管道:重点是"批量发送,提高速度"

Q3: “管道能保证原子性吗?”

A:不能!管道只是批量发送,命令之间可能被其他客户端插入。

一张表看懂区别

特性事务管道Lua脚本
原子性不支持(出错继续)不支持支持
速度快很快一般
保证顺序✅ 保证不保证✅ 保证
主要目的命令连续执行提高性能复杂原子操作
类比超市购物清单快递包裹餐厅套餐

什么时候用?

1. 用管道(最常见)

// 场景:批量插入数据Pipelinepipe=jedis.pipelined();for(Useruser:userList){pipe.set("user:"+user.id,user.toJson());}pipe.sync();// 一次性发出去,速度快!

2. 用事务

// 场景:需要连续执行,不被干扰Transactiontx=jedis.multi();tx.set("order:status","paid");tx.incr("user:123:orderCount");tx.exec();// 这两个操作会连续完成

3. 用Lua脚本

// 场景:库存扣减(不能超卖)Stringscript="local stock = redis.call('GET', KEYS[1]) "+"if tonumber(stock) > 0 then "+" redis.call('DECR', KEYS[1]) "+" return 1 "+// 成功"else "+" return 0 "+// 失败"end";// 原子操作,不会两人同时买到最后一个

记住三句话

  1. 要速度快→ 用管道
  2. 要顺序执行→ 用事务
  3. 要真正原子性→ 用Lua脚本

面试一句话回答

  • 事务能保证原子性吗?
    “不能,Redis事务出错不会回滚,只是命令打包执行”

  • 事务和管道区别?
    “事务保证命令连续执行,管道提高批量操作速度”

  • 管道能代替事务吗?
    “不能,目的不同。管道为性能,事务为顺序执行”

实际怎么选?

你的需求选哪个
插入1万条数据管道(快!)
先扣库存,再记录订单事务(保证顺序)
秒杀抢购Lua脚本(真正原子性)
简单的读写操作普通操作就行
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 23:33:16

PHP版CKEDITOR如何通过示例实现图片自动上传?

军工集团项目技术日志 - 信创环境下的富文本内容迁移解决方案 2023年X月X日 于长沙研发中心 一、需求背景与痛点分析 近期承接某部委涉密项目时&#xff0c;客户反馈现有CMS系统存在以下问题&#xff1a; 政务公文迁移效率低下&#xff1a;需手动调整Word文档格式&#xff0c…

作者头像 李华
网站建设 2026/4/23 8:20:56

ALLOS 与 Ennostar 结成 microLED 战略合作伙伴关系

德国的 ALLOS Semiconductors 与中国台湾的 Ennostar 正式宣布缔结合作伙伴关系&#xff0c;其目标明确&#xff0c;致力于将应用于 microLED 的 200 毫米&#xff08;mm&#xff09;氮化镓 - 硅&#xff08;GaN - on - Si&#xff09;LED 外延片推向大规模量产阶段。此次合作堪…

作者头像 李华
网站建设 2026/4/16 11:56:36

新中地系统学习3个月能做出什么效果?

新中地GIS开发特训营系统课学习时长为5个月左右&#xff0c;每个阶段学习会有一些小练习&#xff0c;阶段结束时会有阶段性项目考核。 那么在新中地系统学习3个月&#xff0c;能做出什么样的效果&#xff1f; 首先来看下学那些内容&#xff1f; 第一阶段&#xff1a;Web开发…

作者头像 李华
网站建设 2026/4/17 1:49:29

冰雪聚贤,智启新局——2026崇礼论坛凝聚AI长期主义共识

2026年1月23日至25日&#xff0c;以“向新而立”为主题的2026崇礼论坛在张家口崇礼太舞小镇成功举办。论坛由崇礼区人民政府指导&#xff0c;太舞滑雪小镇、甲子光年、破圈文化、智辰半导体联合主办&#xff0c;俞敏洪、周鸿祎、沙宝亮等近百位行业大咖齐聚&#xff0c;围绕AI落…

作者头像 李华
网站建设 2026/4/24 0:29:32

AI驱动的开题报告模板,让你的学术写作事半功倍

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…

作者头像 李华