深入解析:Redis事务详解:原理、使用与注意事项

news/2025/10/5 20:18:50/文章来源:https://www.cnblogs.com/ljbguanli/p/19127008

深入解析:Redis事务详解:原理、使用与注意事项

Redis事务详解:原理、使用与注意事项

什么是Redis事务

Redis事务是一组命令的集合,这些命令会被顺序化并串行执行,保证在执行期间不会被其他客户端的命令插入。Redis事务的主要目的是保证一系列命令的原子性执行。

与关系型数据库的事务(ACID)不同,Redis事务有以下特点:

Redis事务的基本使用

Redis事务通过以下三个命令实现:

  1. MULTI:标记事务开始
  2. EXEC:执行事务中的所有命令
  3. DISCARD:取消事务,放弃执行事务块内的所有命令

基本事务示例

> MULTI
OK
> SET user:1:name "Alice"
QUEUED
> SET user:1:age 30
QUEUED
> EXEC
1) OK
2) OK

事务执行过程

  1. 客户端发送MULTI命令,服务器返回OK
  2. 之后的所有命令都会被服务器放入队列而不是立即执行,服务器返回QUEUED
  3. 客户端发送EXEC命令,服务器按顺序执行队列中的所有命令
  4. 服务器返回一个数组,包含每个命令的执行结果

Redis事务的错误处理

Redis事务中的错误分为两种:

1. 入队错误

在命令入队时就能检测到的错误(如语法错误),这类错误会导致整个事务无法执行。

> MULTI
OK
> SET key value
QUEUED
> NONEXISTINGCOMMAND
(error) ERR unknown command 'NONEXISTINGCOMMAND'
> EXEC
(error) EXECABORT Transaction discarded because of previous errors.

2. 执行错误

在命令执行时出现的错误(如对字符串执行INCR操作),这类错误不会影响事务中其他命令的执行。

> MULTI
OK
> SET key1 "hello"
QUEUED
> INCR key1
QUEUED
> SET key2 "world"
QUEUED
> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK

WATCH命令:乐观锁实现

Redis提供了WATCH命令来实现乐观锁,可以在MULTI/EXEC事务之前监视一个或多个键:

> WATCH key1 key2
OK
> MULTI
OK
> SET key1 "new value"
QUEUED
> EXEC
(nil)  // 如果在WATCH后EXEC前有其他客户端修改了key1或key2,事务会执行失败

WATCH机制工作流程:

  1. 客户端使用WATCH监视某些键
  2. 执行MULTI开始事务
  3. 在EXEC执行时,如果发现被监视的键被修改过,则拒绝执行整个事务
  4. 如果未被修改,则正常执行事务

Redis事务的局限性

  1. 不支持回滚:Redis事务中某条命令失败后,不会回滚已执行的命令
  2. 无隔离级别:事务中的命令在执行前不会被实际执行
  3. 性能考虑:长时间运行的事务会阻塞其他客户端
  4. 命令有限制:某些命令(如INFO, SHUTDOWN等)不能在事务中使用

事务的最佳实践

  1. 尽量保持事务短小精悍,避免长时间运行的事务
  2. 合理使用WATCH实现乐观锁,处理并发修改
  3. 对于需要回滚的场景,需要自行实现补偿逻辑
  4. 在集群环境下,事务中的所有键必须位于同一个节点(使用相同的hash slot)

Lua脚本

对于复杂的事务需求,Redis推荐使用Lua脚本:

EVAL "local current = redis.call('GET', KEYS[1])
if current == ARGV[1] then
return redis.call('SET', KEYS[1], ARGV[2])
else
return 0
end" 1 mykey "old value" "new value"

Lua脚本的优势:

  • 原子性执行
  • 减少网络开销(多个命令一次发送)
  • 灵活性高,可以实现复杂逻辑

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phone num

11马金金:15036063732 王梦梦:13949689021 樊兆航:15643637365 齐要夺:13462856861 贺 坤:19939188933 赵 琎:13569184695 王 磊:13839152769 靳斌斌:13673918231 千 军:13569114940 吴庆杰:13603891396…

Perplexity发布搜索API,驱动下一代AI应用开发

Perplexity推出搜索API,开放其公共问答引擎的基础架构,为开发者提供实时可靠的搜索结果,支持构建AI代理、应用程序和检索增强管道,具有实时更新和高效处理能力。Perplexity推出了搜索API,开放了支撑其公共问答引擎…

DNF做钓鱼网站广州网站建设程序员培训

前言 前段时间朋友拿了个网站给我,让我帮忙添加几个小功能,我爽快的答应了,但是当我打开源码,我瞬间就奔溃了,整个项目连最基本的三层框架也没有搭建,仅仅是封装了一个sqlhelp作为数据库的操作接口,项目中的…

毕业设计代做网站推荐重庆模板网站建设

原标题:[原创]简单介绍光缆终端盒知识光缆终端盒又叫光纤终端盒,很多工程商也叫光缆盘纤盒,是在光缆敷设的终端保护光缆和尾纤熔接的盒子,主要用于室内外光缆的直通熔接和分支接续及光缆终端的固定,起到尾纤盘储和保护…

建设商业门户网站的重要企业微信公众号怎么创建

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题 需求:左边这列固定x行,右边显示下拉,并且赋上默认值 public void Set(){// 添加需要固定显示的行数dataGridView1.Rows.Add("早班";dataGridView1.Rows.Add("中…

PWN手的成长之路-09-SWPUCTF 2023 秋季新生赛Shellcode

远程连接环境。没什么有效信息,只是提示我们这道题会用到 shellcode。file 查看文件。64 位可执行 ELF 文件。checksec 查看文件安全属性。有了栈溢出保护,以及 PIE 保护IDA 打开文件,尝试反编译,但是失败了。直接…

OKR1

P1 学了一些关于计数问题的 DP 状态设计及转移方式,比如连续段 DP,贡献提前计算。 对于排列问题得到两个小点,一是考虑顺序插入,二是 P2 做题第一天模拟赛第二题接触到了连续段 DP。 permutation oddness 和 摩天大…

云数据库选型指南:关系型 vs NoSQL vs NewSQL的企业决策 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为

详细介绍:AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

当 Python 遇上 Go:Sponge 如何成为替代 Django/Flask 的理想选择 - 指南

当 Python 遇上 Go:Sponge 如何成为替代 Django/Flask 的理想选择 - 指南2025-10-05 20:05 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: …

2025 年装盒机制造厂 TOP 企业品牌推荐排行榜,自动化 / 喷胶 / 牙膏 / 手机壳 / 3C 数码 / 内外盒 / 面膜 / 电子产品 / 玩具 / 日用品装盒机推荐这十家公司!

在当今制造业快速发展的浪潮中,装盒机作为包装环节的关键设备,其性能与质量直接影响着企业的生产效率和产品品质。然而,当前装盒机行业却面临着诸多问题。市场上装盒机产品种类繁多,质量参差不齐,部分厂家为追求短…

英语_阅读_Chinas Spring Festival_待读

Chinas Spring Festival has been added to a "special list" by UNESCO (联合国教科文组织). 中国的春节已被联合国教科文组织列入“特别名录”。 This list is for very important cultural things that w…

2025 年自动包装生产线 TOP 企业品牌推荐排行榜!食品行业 / 日化产品 / 智能化 / 小型 / 多功能集成 / 柔性 / 后道 / 高速自动包装生产线推荐!

引言在当今制造业快速发展的大背景下,自动包装生产线作为提升生产效率、保障产品质量的关键设备,其重要性日益凸显。然而,当前自动包装生产线行业却面临着诸多问题。市场上品牌众多,产品质量参差不齐,部分厂家为了…

团购商城网站建设方案网站搭建介绍

1.Spring常用注解: 1)Repository将DAO类声明为Bean 2)Service用于修饰service层的组件 3)Controller通常作用在控制层,将在Spring MVC中使用 4)Component是一个泛化的概念,仅仅表示spring中的一…

电白区住房和城乡建设局网站建p2p网站

TDesign 官方文档:https://tdesign.tencent.com/vue/components/button 我们先打开一个普通的vue项目 然后 如果你是 vue 2.6 或者 低于 2.6 在终端执行 npm i tdesign-vue如果你是 2.7 或者更高 执行 npm i tdesign-vuenaruto这里 我们 以 2.6为例 因为大部分人 用vue2 都是…

AI 自我理解边界

跳至內容 聊天歷程紀錄 你說: 目前的AI能够做到一边移动光标,一边理解自己在做什么吗?如果让AI能够看见或者增加视觉功能他能够理解吗? ChatGPT 說: 这个问题很关键,关系到当前 AI 认知能力的本质。“一边移动光…

api调用钉钉群机器人发信息 - 规格严格

https://blog.csdn.net/EaSoNgo111/article/details/132823440

2025 年氢氧化铝生产厂家 TOP 品牌榜单来袭,阻燃,高白,酸融,导热,超细,微粉级,低粘度,灌封胶用,覆铜板用氢氧化铝公司推荐!

在氢氧化铝行业,目前存在不少亟待解决的问题。原料指标不稳定,使得成品稳定性也随之降低,许多生产厂家在稳定供货上表现不佳,特别是对于那些对阻燃、杂质、PH、电导等指标有较高要求的行业而言,这种不稳定性造成的…

飞算 JavaAI 赋能老工程重构:破旧立新的高效利器

飞算 JavaAI 赋能老工程重构:破旧立新的高效利器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…