Redis - 深入理解Redis事务

news2024/12/27 11:07:15

目录

  • Redis是如何实现事务的?
  • 事务中执行的命令出现错误,会回滚事务吗?
  • 同一个连接可以重复开启事务吗?
  • 多个客户端同时开启事务会怎样?
  • 使用Redis事务只用MULTI和EXEC吗?
  • Redis中的WATCH机制是怎么实现的?
Redis是如何实现事务的?

解读
事务要满足ACID四个原则。了解Redis实现事务的机制,就能了解Redis是如何分别保证ACID的。同时,了解了事务实现机制,也能清楚知道Redis事务有何优劣,在使用时如何避免Redis事务缺点。

参考

  • Redis事务

概要

  1. Redis通过四个命令实现事务: WATCH, MULTI, EXEC, DISCARD
  2. Redis事务以MULTI命令开始,EXEC/DISCARD命令结束。EXEC用于提交事务,DISCARD用于取消事务。
  3. 在开启事务时,Redis操作命令并不会立即执行,而是会先进入事务队列。Redis事务队列是一个FIFO队列
  4. 当执行EXEC命令时,会把事务队列中的命令逐个执行,不会被任何命令中断。
事务中执行的命令出现错误,会回滚事务吗?

解读
通常,一个事务中会有不止一个Redis操作,任何一个操作都有失败的可能。在有操作出错的情况下,会影响事务的执行吗?

参考

  • Redis事务

概要

  1. 首先,Redis事务时不支持回滚的。也就是说,如果事务中的命令执行出错,已经执行的命令不会撤回,后续的命令也会继续执行。
  2. Redis事务的命令分为入队和执行两个阶段。在入队(进入事务队列)时出错,Redis会忽略入队出错的命令,不会影响后续命令入队。执行时出错,出错命令会被Redis忽略,其他没有出错的命令均会执行。
同一个连接可以重复开启事务吗?

解读
本质问题是是否允许事务嵌套。

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理

概要

  1. Redis事务不能嵌套。如果再收到MULTI命令开启事务,会返回错误(redis-cli会返回(error) ERR MULTI calls can not be nested这样的错误)
  2. 遇到嵌套事务返回错误后,并不会影响事务队列继续接收命令,也不会修改事务队列中的任何数据。
多个客户端同时开启事务会怎样?

解读
在并发情况,很容易出现多个客户端同时开启事务的情况。这时Redis会区分客户端维护事务队列吗?另外,实际工程中为了提升性能,通常会用Redis连接池复用连接,这种情况下,会出现连接复用导致事务嵌套吗?

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理
  • Sping Data Redis 使用事务时,不关闭连接的问题

概要

  1. Redis事务队列是与连接绑定的,不同的连接中允许同时开启事务,不会相互影响
  2. 合理的事务管理器中,会在开启事务时绑定连接,防止连接被其他请求复用。不过应用不当,会出现连接不能被归还的问题。(由此可见,一个优秀的事务管理器是多么重要)
使用Redis事务只用MULTIEXEC吗?

解读
使用Redis事务,不能单纯只用MULTIEXEC,因为某些key在事务执行时已经变了。正确的Redis事务需要保证事务执行时,事务涉及的数据没有被修改。

参考

  • Redis设计与实现-事务

概要

  1. 在开启事务前,使用WATCH命令监视指定的key,形成乐观锁
  2. 事务执行时,如果被WATCH的key发生了变化,则事务失效,不能执行。
Redis中的WATCH机制是怎么实现的?

解读
无他,只是为了了解底层实现原理

参考

  • Redis事务
  • Redis设计与实现-事务

概要

  1. 每个被WATCH的key都会维护一个WATCH这个key的所有client列表
  2. 当被WATCH的key发生修改时(执行任意修改命令),所有WATCH该key的client的REDIS_DIRTY_CAS字段会被修改为打开状态。
  3. 当执行事务时,如果这个client的REDIS_DIRTY_CAS字段被打开,说明有至少一个数据被修改,事务不能执行。

参考
Redis官方文档-Transactions

最后编辑于:2024-09-18 20:51:05


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

GAMES104:13 引擎工具链基础-学习笔记

文章目录 一,工具链二,复杂的工具2.1 界面GUI2.2 设计模式Design Pattern2.3 数据的加载和存储2.4 资产引用 三,资产加载Deserialization3.1 资产解析Parse3.2 资产版本兼容性(Compatibility) 四, 如何制作…

搞安全必看——IPS和IDS到底有啥区别?

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 随着数字化转型的加速推进,网络安全已成为各行业不可或缺的一环。对于现代企业和组织而言&#x…

【JavaEE初阶】多线程6(线程池\定时器)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 实例3:线程池 参数解释 核心线程数, 最大线程数 允许空闲的最大时间 ,时间单位 任务队列(阻塞队列) 线程工厂>工厂设计模式 拒绝策略 使用举例 模拟实现一个线…

从零开始讲DDR(0)——DDR的前世今生

一、计算机组成 计算机组成结构(Computer Architecture)是计算机系统的核心,它定义了计算机的基本工作原理和设计模式。计算机的组成可以分成以下3大类:中央处理器(CPU)、存储器和输入/输出子系统。 1.1 中…

Linux文件IO-基础知识了解及文件描述符

1、简介 本章给大家介绍 Linux 应用编程中最基础的知识,即文件 I/O(Input、Outout),文件 I/O 指的是对文件的输入/输出操作,说白了就是对文件的读写操作;Linux 下一切皆文件,文件作为 Linux 系…

深度学习 之 常见损失函数简介:名称、作用及用法

引言 在机器学习和深度学习中,损失函数(Loss Function)是模型训练过程中一个不可或缺的部分。它用来度量模型预测结果与真实值之间的差异,从而指导模型参数的优化。合理选择损失函数对于提高模型的准确性和泛化能力至关重要。本文…

Mint Expedition Season 3 拉开帷幕:登顶高峰的时刻到了

自 7 月 15 日 Mint Expedition 启动以来,Mint,一条专注于 NFT 行业的以太坊 Layer 2,日常交易量和交易额都出现了爆发式增长。这一成功离不开 Mint 社区的合作,包括 Minters、Web3 去中心化应用程序的开发者,以及大量…

模电模块(一)

这个看起来功能挺全的,就是小贵,有时间自己做一个: 首页-康威科技-淘宝网 (taobao.com) 画一个集成板,集合上述模块的功能。

深圳国际VR/AR博览会圆满落下帷幕

近日,深圳国际VR/AR博览会在深圳国际会展中心2号馆圆满落下帷幕。该展会于9月11日至13日举行,是一个与光博会同期举行的大型盛会。 据主办方介绍,深圳国际VR/AR博览会(Shenzhen International VR/AR Expo),…

力扣最热一百题——缺失的第一个正数

目录 题目链接:41. 缺失的第一个正数 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:标记数组法 1. 将非正数和超出范围的数替换 2. 使用数组下标标记存在的数字 3. 找到第一个未标记的位置 4. 为什么时间复杂…

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 🏠 C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…

数据处理与统计分析篇-day03-Numpy环境搭建

概述 python优势 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务 数据分析领域里有海量开源库 机器学习/深度学习领域最热门的编程语言 在爬虫,Web开发等领域均有应用 常用开源库 numpy NumPy(NumericalPython) 是 Python 语言的一…

创客中国AIGC专题赛冠军天鹜科技:AI蛋白质设计引领者

“落霞与孤鹜齐飞,秋水共长天一色——这句出自《滕王阁序》的诗句,是我作为江西人熟记于心的佳句。它描绘的天地壮丽景色常浮现于我的脑海,正是这种豁达与壮观,启发我们将公司命名为‘天鹜科技’,我们希望将源自自然的蛋白质与现代科技的创新精神相结合,打造蛋白质设计与应用的…

OpenBayes 教程上新 | AI 时代的「神笔马良」,Hyper-SD 一键启动教程上线!

每次脑海中的画面栩栩如生,想画下来却难以下笔? 每次画完自己觉得非常像,但是旁人却一头雾水? 每次想用文生图,但不知道如何精确地输入 prompt? AI 时代的「神笔马良」Hyper-SD 来了! 仅需简…

基本仪表放大器+基本电容耦合隔离放大器+OTA(基本OTA电路+OTA增益)

2024-9-18,星期三,21:37,天气:多云,心情:晴。大家中秋节都过的怎么样啊,如果没过爽也没有关系,因为再上八天班就能迎来10.1长假啦!!!!…

【机器学习】--- 自然语言推理(NLI)

引言 随着自然语言处理(NLP)的迅速发展,**自然语言推理(Natural Language Inference, NLI)**已成为一项重要的研究任务。它的目标是判断两个文本片段之间的逻辑关系。这一任务广泛应用于机器阅读理解、问答系统、对话…

五星级可视化页面(30):本系列最后一期,压轴出场。

不知不觉分享了30期高品质的五星级可视化大屏界面,该系列文章也该收尾了,本期为大家分享最后一批界面,我们下一个系列专辑见。

力扣之181.超过经理收入的员工

文章目录 1. 181.超过经理收入的员工1.1 题干1.2 准备数据1.3 题解1.4 结果截图 1. 181.超过经理收入的员工 1.1 题干 表:Employee -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | salary | int | | mana…

W25QXX系列Flash存储器模块驱动代码

目录 W25QXX简介 硬件电路 W25Q128框图 Flash操作注意事项 驱动代码 W25QXX.h W25QXX.c W25QXX简介 W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景 存储介质:Nor Flash&#xff0…

Apache SeaTunnel Zeta引擎源码解析(三) Server端接收任务的执行流程

作者:刘乃杰 编辑整理:曾辉 引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本,围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程,希望通过这篇文档,对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文…