Redis(02)——事务管理

news2024/9/20 20:38:40

事务概念

Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化,在事务执行过程中,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中

  1. Redis事务没有隔离级别

批量操作在发送EXEC命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到

  1. Redis不保证原子性、不支持回滚

Redis中单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行

事务超时
Redis 事务支持超时。Redis 事务超时是指在指定的时间内没有执行 EXEC 命令,那么该事务就会被自动回滚。
Redis 事务超时可以防止事务长时间处于打开状态,从而导致死锁或其他问题。
Redis 事务超时可以通过以下两种方式设置:

  1. 显式超时:为了避免事务超时,可以在事务中显式地使用 EXPIRE 命令为事务设置显式超时。例如,以下命令将为当前事务设置 10 秒的超时:EXPIRE my_transaction 10
  2. 隐式超时:如果在配置文件中设置了事务超时,那么所有事务都会隐式地具有该超时值。例如,以下配置将为所有事务设置 30 秒的超时:transaction-timeout 30

Redis 事务超时优点

  1. 防止死锁:如果一个事务长时间处于打开状态,那么它可能会导致死锁。例如,如果两个事务同时尝试修改同一个键,那么这两个事务都会被阻塞,并且都不能执行。Redis 事务超时可以防止这种情况的发生,因为如果一个事务在超时时间内没有执行 EXEC 命令,那么它就会被自动回滚。
  2. 提高性能:Redis 事务超时可以提高 Redis 的性能。如果一个事务长时间处于打开状态,那么它会占用 Redis 的资源,并且可能会导致 Redis 的性能下降。Redis 事务超时可以防止这种情况的发生,因为如果一个事务在超时时间内没有执行 EXEC 命令,那么它就会被自动回滚,并且 Redis 的资源就会被释放。

事务操作

  1. watch key1[key2…]:监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断(类似乐观锁)
  2. multi:标记一个事务块的开始(queued)
  3. exec:执行所有事务块的命令(一旦执行exec后,之前加的监控锁都会被取消掉)
  4. discard:取消事务,放弃事务块中的所有命令
  5. unwatch:取消watch对所有key的监控

基本使用

127.0.0.1:6379> multi   # 开启事务
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec  # 执行事务
1) OK
2) OK
3) "v2"
4) OK
127.0.0.1:6379> multi     # 开启事务
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> discard 	# 放弃事务	
OK
127.0.0.1:6379> get k4	# 事务中的命令都不会被执行
(nil)

编译型异常

若在事务队列中存在命令性错误(类似于Java编译性错误),事务中的所有命令都不会被执行

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> getset k1
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k2
(nil)

运行时异常

如果事务队列中存在语法性(类似于Java的1/0的运行时异常),那么执行命令的时候,其他命令是可以正常执行的,错误命令会抛出异常

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 "v1"
QUEUED
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range  # 虽然这条命令报错,但是依旧执行成功
3) OK
4) "v3"

watch监控

使用watch检测k1,事务期间k1数据未变动,事务执行成功
image.png
使用watch检测k1,在开启事务后,在新窗口执行新操作,更改k1的值,模拟其他客户端在事务执行期间更改watch监控的数据,执行EXEC命令后,事务未成功执行
image.png
一旦执行EXEC开始事务的执行后,无论事务使用执行成功与否,WATCH对变量的监控都将被取消,当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作
注意:watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败

事务超时

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> EXPIRE my_transaction 10
(integer) 1
127.0.0.1:6379> SET foo bar
QUEUED
127.0.0.1:6379> SET baz qux
QUEUED
127.0.0.1:6379> EXEC
(integer) 1

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

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

相关文章

QT设置qss

Qt设置qss文件(设置在qrc中) 1、右击项目选择添加新文件 2、在弹出的对话框中选择Qt -> Qt Resource File 3、随便起一个名称 4、在代码路径下新建一个stylesheet.qss文件,随便写入一些样式 5、右击resources.qrc,选择添加…

go modules使用

创建项目 在使用GoLand创建项目的时候,会自动创建对应的go.mod文件。 创建完后 创建文件 创建一个main.go的文件,里面print一个hello world。 在运行时可以设置是否采取先生成文件再运行。 为空的话则不输出。 下面的Environment为设置运行的环境…

数据恢复软件应该怎么选?看这篇就够了

存储数据的选择有很多,例如计算机硬盘、智能手机、平板电脑、闪存驱动器和存储卡。然而,所有这些都可能在某个时刻失败。我们当中谁没有不小心删除过重要的文档或照片? 如果最坏的情况发生,仍然有希望。一种选择是聘请数据恢复服…

【Linux】线程Pthread的概念 | NPTL线程库函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

10个优化Instagram SEO的必学策略

Instagram SEO 是优化 Instagram 内容以使其在平台搜索结果中被发现的做法。如果你希望你可以更快的让你的Ins获得流量&#xff0c;做好SEO就成功了一半。Instagram 搜索结果包括相关内容、帐户、音频、主题标签和地点&#xff0c;下面为你总结10个策略技巧&#xff01; 一、In…

矩阵的正定(positive definite)性质的作用

1. 定义 注意&#xff0c;本文中正定和半正定矩阵不要求是对称或Hermite的。 2. 性质 3. 作用 &#xff08;1&#xff09;Axb直接法求解 cholesky实对称正定矩阵求解复共轭对称正定矩阵求解LDL实对称非正定矩阵求解复共轭对称非正定矩阵求解复对称矩阵求解LU实非对称矩阵求解…

【新书推荐】6.3 switch语句

本节必须掌握的知识点&#xff1a; 示例代码二十一 代码分析 汇编解析 6.3.1 示例二十一 ■switch语句形式 switch语句是一种多路判断语句&#xff0c;会根据不同的选项&#xff0c;跳转到不同的分支语句。 switch语句的语法格式&#xff1a; switch(Controlling Expr…

情报搜集神器:Spiderfoot 保姆级教程

一、介绍 SpiderFoot是一款开源的情报搜集和足迹分析工具&#xff0c;用于自动化收集有关目标的信息。它被设计为一种开放式情报&#xff08;OSINT&#xff09;工具&#xff0c;可以帮助安全专业人员、渗透测试人员和研究人员收集、分析和汇总来自互联网的信息。 以下是 Spid…

java的excel列行合并模版

1.效果 2.模版 <tableborder"1"cellpadding"0"cellspacing"0"class"tablebor"id"TABLE"><tr align"center" class"bg217"><td style"background-color: #008000; color: #ffffff;p…

华为数通方向HCIP-DataCom H12-821题库(单选题:441-460)

第441题 下面是一台路由输出的信息,关于这段信息描述正确的是 <R1>display bgp peerBGP local router ID : 2.2.2.2Local AS number : 100Total number of peers : 2 Peers in established state : 0Peer V AS MsgRcvd MsgSent OutQ Up/Down …

fgcvbnm

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏&#xff1a;《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

离谱!英国大学53%本科生用AI写论文!留学生该如何面对AI冲击?

随着AI的不断强化和更新换代&#xff0c;越来越多的学生开始使用人工智能辅助写论文&#xff0c;能省去不少信息搜集的时间。 英国大学从最开始的明令禁止&#xff0c;到如今也在逐步接受学生将它用做辅助工具&#xff1a; 然而&#xff0c;AI的使用其实还存在很多问题&#xf…

蓝桥杯省赛无忧 课件137 第20次学长直播带练配套课件

01 树上异或 02 森林的最大美丽值 03 古老文明的数字仪式

3、生成式 AI 如何帮助您改进数据可视化图表

生成式 AI 如何帮助您改进数据可视化图表 使用生成式 AI 加速和增强数据可视化。 图像来源:DALLE 3 5 个关键要点: 数据可视化图表的基本结构使用 Python Altair 构建数据可视化图表使用 GitHub Copilot 加快图表生成速度使用 ChatGPT 为您的图表生成相关内容使用 DALL-E 将…

Token、CAS、JWT和OAuth 2.0认证系统认证中心系统设计对比与实践总结

在现代应用开发中&#xff0c;身份认证是一个关键的问题。为了解决身份认证的需求&#xff0c;开发人员可以选择不同的认证系统&#xff0c;如Token、CAS&#xff08;Central Authentication Service&#xff09;和JWT&#xff08;JSON Web Token&#xff09;OAuth 2.0认证系统…

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

“掌握温度&#xff0c;感知湿度&#xff0c;一触即知&#xff01;”DHT11温湿度传感器&#xff0c;为您的生活增添一份关怀与精准。#非标协议【下】 前言预备知识1.DHT11温湿度传感器初识1.1产品概述1.2与51单片机接线1.3数据传送逻辑和数据格式 2.发送时序检测DHT11温湿度传感…

无心剑小诗《醉爱平凡人生》

醉爱平凡人生 平凡人生&#xff0c;别样卓越 做调色板上最亮的颜料 没有豪华光环与繁杂束缚 只有一份简单的快乐 不追求虚名&#xff0c;不被物欲左右 安静地享受生活&#xff0c;品味每滴雨露 平凡人生&#xff0c;宛如流淌的小溪 没有壮烈激流&#xff0c;却有恒久细流 不…

Java中处理I/O操作的不同方式:BIO,NIO,AIO

Java中处理I/O操作的不同方式&#xff1a;BIO&#xff0c;NIO&#xff0c;AIO 亲爱的朋友&#xff0c; 在这美好的时刻&#xff0c;愿你感受到生活的温暖和欢乐。愿你的每一天都充满着笑容和满足&#xff0c;无论面对什么挑战都能勇往直前&#xff0c;化解困境。 希望你的心中充…

LeetCode:26.删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 目录 题目&#xff1a; 思路&#xff1a; 代码注释&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路&#xff1a; 没啥特殊的&#xff0c;老老实实双指针遍历数组&#xff0c;&#xff0…

2024.2.6日总结(小程序开发3)

页面配置 页面配置和全局配置的关系&#xff1a; 小程序中&#xff0c;app.json中的window节点&#xff0c;可以全局配置小程序中每个页面的窗口表现 如果某些小程序想要有特殊的窗口表现&#xff0c;可以用页面级别的.json配置文件实现这个需求 页面配置和全局配置冲突时&…