Redis(02)——事务管理

事务概念

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.mzph.cn/news/674210.shtml

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

相关文章

Windows权限维持

注册表类: 普通注册表后门 在一般用户权限下,通常是将要执行的后门程序或脚本路径填写到如下注册表的键值中HKCU\Software\Microsoft\Windows\CurrentVersion\Run,键名任意。普通权限即可运行 cmd下操作: reg add "HKEY_…

我差一点就中了Magniber勒索病毒

前言 勒索攻击已经成为了全球最大的网络威胁,越来越多的黑客组织开始加入到勒索病毒攻击活动,目前勒索病毒黑客组织大致可以分为两类,一类攻击目标主要以TO C(个人)为主,一类攻击目标主要以TO B(企业)为主,前者的勒索…

C# CAD交互界面-自定义面板集(四)

运行环境 vs2022 c# cad2016 调试成功 一、引用 using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Windows; using System.Windows.Forms; 二、程序说明 创建自定义面板集(PaletteSet)的C#命令方法实现。该方法名为CreatePalette&#xff…

Redis篇之持久化

一、为什么要进行持久化 Redis是一个基于内存的键值存储系统,但为了保证数据在服务器重启、故障等情况下不丢失。 二、应该怎么持久化 1.RDB持久化 (1)RDB是什么 RDB全称Redis Database Backup file(Redis数据备份文件&#xff…

流程引擎activiti、flowable、camunda简单介绍

市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。 其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。 推荐使用camu…

C语言带颜色输出

我们在做函数API功能测试时或其他数据解析时,为了区分信息内容,可以给不同级别的输出加上不同的颜色,以方便查看。 如,我自己的一个项目中的显示效果: 这样做可以更加清晰的反应数据信息! 实现原理&#x…

07:Kubectl 命令详解|K8S资源对象管理|K8S集群管理(重难点)

Kubectl 命令详解|K8S资源对象管理|K8S集群管理 kubectl管理命令kubectl get 查询资源常用的排错命令kubectl run 创建容器 POD原理pod的生命周期 k8s资源对象管理资源文件使用资源文件管理对象Pod资源文件deploy资源文件 集群调度的规则扩容与缩减集群更…

网络分析仪的防护技巧

VNA的一些使用防护技巧,虽不全面,但非常实用: [1] 一定要使用正规接地的三相交流电源线缆进行供电,地线不可悬浮,并且,火线和零线不可反接; [2] 交流供电必须稳定,如220V供电&#x…

【Git版本控制 03】远程操作

目录 一、克隆远程仓库 二、推送远程仓库 三、拉取远程仓库 四、忽略特殊文件 五、命令配置别名 一、克隆远程仓库 Git是分布式版本控制系统,同⼀个Git仓库,可以分布到不同的机器上。怎么分布呢? 找⼀台电脑充当服务器的⻆⾊&#xff…

Elementplus报错 [ElOnlyChild] no valid child node found

报错描述&#xff1a;ElementPlusError: [ElOnlyChild] no valid child node found 问题复现&#xff08;随机例子&#xff09;&#xff1a; <el-popover placement"right" :width"400" trigger"click"><template #reference><e…

Spring Cloud使用ZooKeeper作为注册中心的示例

简单的Spring Cloud应用程序使用ZooKeeper作为注册中心的示例&#xff1a; 1.新建模块&#xff1a; 2.勾选依赖&#xff1a; 3.在pom.xml文件中做出部分修改及添加Spring Cloud Zookeeper 依赖版本&#xff1a; 完整pom文件 <?xml version"1.0" encoding&q…

SpringBoot之事务源码解析

首先事务是基于aop的&#xff0c;如果不了解aop的&#xff0c;建议先去看下我关于aop的文章: Spring之aop源码解析  先说结论&#xff0c;带着结论看源码。首先&#xff0c;在bean的生命周期中&#xff0c; 执行实例化前置增强&#xff0c;会加载所有切面并放入缓存&#xff0…

Centos 7.5 安装 NVM 详细步骤

NVM&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具&#xff0c;它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本&#xff0c;为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

1 月 Web3 游戏行业概览:市场实现空前增长

作者&#xff1a;lesleyfootprint.network 今年一月&#xff0c;区块链游戏领域迎来了爆发式增长&#xff0c;活跃用户的数量大幅提升。 区块链游戏不断融合 AI 技术&#xff0c;旨在提升玩家体验并扩大其服务范围&#xff0c;公链与游戏的兼容性问题也日渐受到重视。技术革新…

Python进阶--爬取下载人生格言(基于格言网的Python3爬虫)

目录 一、此处需要安装第三方库: 二、抓包分析及Python代码 1、打开人生格言网&#xff08;人生格言-人生格言大全_格言网&#xff09;进行抓包分析 2、请求模块的代码 3、抓包分析人生格言界面 4、获取各种类型的人生格言链接 5、获取下一页的链接 6、获取人生格言的…

canvas实现涂鸦画板功能

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

路由引入路由过滤排错

目录 排错网络拓扑图 排错需求 故障排错 故障一 故障二 故障三 排错网络拓扑图 排错需求 按照图示配置 IP 地址&#xff0c;总部和分支 A、分支 B 各自使用 loopback 口模拟业务网段公司业务流分为 A 流和 B 流&#xff0c;网段如图所示总部内部配置 OSPF 互通&#xff0…

《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)

文章目录 2.1 规划高效的数据库架构2.1.1 基础知识2.1.2 重点案例2.1.3 拓展案例 2.2 数据类型和表设计2.2.1 基础知识2.2.2 重点案例2.2.3 拓展案例 2.3 索引设计原则2.3.1 基础知识2.3.2 重点案例2.3.3 拓展案例 2.1 规划高效的数据库架构 在开启我们的数据库设计之旅之前&a…

【数据分享】1929-2023年全球站点的逐年平均风速(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

Ubuntu 22 部署Zabbix 6.4

一、安装及配置postgresql sudo apt-get update sudo apt-get install postgresql postgresql-client 修改配置文件&#xff0c;配置远程访问&#xff1a;&#xff08;PostgreSQL安装路径下的data&#xff0c;也是安装时data的默认路径&#xff09;data目录下的 pg_hba.conf …