当前位置: 首页 > news >正文

redis的事务和watch机制

这里写目录标题

  • 第一章、redis事务和watch机制
    • 1.1)redis事务,事务的三大命令
      • 语法:开启事务 multi
      • 语法:执行事务 exec
      • 语法:取消事务 discard
    • 1.2)redis事务的错误和回滚的情况
    • 1.3)watch机制
      • 语法:watch key [key ...]
      • 语法:unwatch

第一章、redis事务和watch机制

1.1)redis事务,事务的三大命令

什么是redis事务
Redis 中的事务(transaction)是一个单独隔离的操作,保证两个或两个以上的命令集合按需排队并顺序执行,中间不会被任何其他操作打断。
redis事务其实是指运用事务的思想实现一组集合命令的执行,没有回滚的概念,严格意义上没有事务。

①multi - setAutoCommoit(false)-事务开启

语法:开启事务 multi

作用:标记一个事务的开始。通过multi,后续的命令都会按照先后顺序被放进一个队列当中。当用户键入exec后,这些指令都会按顺序执行。
返回值:总是返回 ok

②exec -执行

语法:执行事务 exec

作用:执行所有事务块内的命令
返回值:事务内的所有执行语句内容,事务被打断(影响)返回 nil


③discard -取消

语法:取消事务 discard

作用:取消事务,如果开启multi后输入若干命令,再键入discard,则之前的命令令通通取消执行。
返回值:总是返回 ok

# 开启事务
127.0.0.1:6379> MULTI
OK
# 输入两个或者两个以上命令
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
# 执行命令
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"

1.2)redis事务的错误和回滚的情况


①组队时出错,错误对于redis来说是已知的,事务中的所有指令都会失效。
在这里插入图片描述

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k33
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> keys *
(empty array)


②运行时出错:因为错误是未知的,所以redis必须执行时才能知道错误,而redis无错误回滚机制,会继续执行后续指令并有效。
在这里插入图片描述

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> INCR k1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379>

1.3)watch机制

①watch 监视某个或者某几个key的值,如果有 key 的 value 值在事务 EXEC 执行之前被修改了,那么事务将被打断。
返回值:总是返回 ok

语法:watch key [key …]


②取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了
返回值:总是返回 ok

语法:unwatch


③例子
启动服务器redis-server , 再开启两个客户端连接。 分别叫 A 客户端 (红色)和 B 客户端(黄色)。
在这里插入图片描述
在这里插入图片描述
1)在 A 客户端设置 key : str.lp 登录人数为 10
2)在 A 客户端监视 key : str.lp
3)在 A 客户端开启事务 multi
4)在 A 客户端修改 str.lp 的值为 11
5)在 B 客户端修改 str.lp 的值为 15
6)在 A 客户端执行事务 exec
7)在 A 客户端查看 str.lp 值,A 客户端执行的事务没有提交,因为 WATCH 的 str.lp 的值已经被修改了, 所以放弃了事务。
在这里插入图片描述

相关文章:

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1)redis事务,事务的三大命令语法:开启事务 multi语法:执行事务 exec语法:取消事务 discard 1.2)redis事务的错误和回滚的情况1.3)watch机制语法&…...

objectMapper.getTypeFactory().constructParametricType 方法的作用和使用

在使用 Jackson 库进行 JSON 数据的序列化和反序列化时,经常会使用到 ObjectMapper 类。其中,objectMapper.getTypeFactory().constructParametricType 方法用于构造泛型类型。 具体作用和使用如下: 作用: 构造泛型类型&#x…...

【websocket - Tornado】简易聊天应用

1、背景 项目测试的过程中需要自己搭建一个webscoket站点,确保此类服务接入后台系统后访问不受影响。python的服务框架常用的有Flask、Django、Tornado,每个框架的侧重点不同,导致使用的场景就会有所差异。 Flask轻量级,采用常规的同步编程方式,需要安装其他模块辅助,主…...

TCP 三次握手,四次挥手

1、三次握手 第一次握手 SYN 等于1,SeqX 第二次握手 SYN等于1 ACK等于1,SeqY,AckX1 第三次SYN等于0 ACK等于1,SeqX1,AckY1 ackRow都是对应请求seqraw,三次握手后,Seq就是服务器前一个包中的ac…...

Nginx之Rewrite重定向

常见的Nginx正则表达式 ^:匹配输入字符串的起始位置 $:匹配输入字符串的结束位置 *:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” :匹配前面的字符一次或者多次。如“ol”能匹配"ol"及“oll”、&q…...

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年高级前端进阶:前端登顶之巅-最全面的前端知识点总结站点 *分享一个使用比较久的🪜 技术框架公司的选型:uni-app uni-ui vue3 vite4 ts 需求分析:微信小程序-uni-ui内容 1、创建一个自定义的下拉,支持多…...

VUE+view table.exportCsv()导出.csv文档时如何防止数据格式为科学计数

当使用table.exportCsv()方法导出数据时,出现科学计数法问题,像电话号码,身份证号码等,当数据大于15位后面的会用0替代。 针对这一问题,解决方法如下:就是再数字前加上制表符“\t”注意双引号,…...

Java基础练习六(排序)

排序 1. 第n大数 给定一个整数数组,输入一个值 n, 输出数组中第 n 大的数。 import java.util.Arrays; import java.util.Scanner;public class Work0801 {public static void main(String[] args) {int[] arr {2,3,1,8,3,9,6};// 冒泡排序,第n大数for (int i 0; …...

【Go】Go数据操作 - 处理JSON文件

目录 何为JSON 编码JSON 实践时刻 解码JSON 实践时刻 延伸拓展 何为JSON JSON (JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。JSON最初是JavaScript的一部分,后由于便于快速编写的特性,被开发者独立出来。基本上所有的语…...

服务器之LNMP

lnmp的构成 L:linux系统,操作系统。 N:nginx网站服务,前端,提供前端的静态页面服务。同时具有代理,转发的作用。 转发:主要是转发后端请求。转发到PHP。nginx没有处理动态资源的功能,他有可以支持转发动态请求的模块。 M&…...

恒运资本:定向增发一般多久完成?

随着现代企业的不断发展壮大,企业需求的资金也越来越多,而定向增发成为了企业融资的一个不可或缺的方法之一。那么,定向增发一般需求多长时刻来完结呢?本文将从多个角度进行剖析,以期对此问题有更深化的了解。 一、 定…...

mysql进阶篇(二)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

考研C语言进阶题库——更新31-32题

目录 31.姜太公门前有一个池塘,他每天都会去池塘里面钓鱼,他钓鱼技术非常高,距离水面五米的深度之内,包括五米的鱼,他都能钓到池塘里面一共有n条鱼,给出每条鱼距离水面的高度,问姜太公一次能钓…...

机动车号牌正则表达式(兼容新能源车牌)

说明:“|”前面面是绿牌车(8位)规则,“|”后面是蓝牌车(7位)规则。 ([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]A-Z)|(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵…...

idea如何上传项目到github(超详细)

idea如何上传项目到github 1、IDEA配置2、项目上传到本地仓库2.1、创建本地git仓库2.2、Add操作2.3、Commit操作 3、项目上传到Github4、拿到登录Github的token 1、IDEA配置 File-Settings-VersionControl-Git Git的安装路径下bin目录下的git.exe可执行文件 可以直接点 Gene…...

护网专题简单介绍

护网专题简单介绍 一、护网红蓝队介绍1.1、网络安全大事件1.2、护网行动由来1.3、护网行动中的角色二、红队介绍2.1、红队所需技能2.2、红队攻击流程 三、蓝队介绍3.1、蓝队所需技能3.2、蓝队防守四阶段3.3、蓝队前期准备 四、常见安全厂商介绍4.1、常见安全厂商 五、常见安全产…...

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…...

<dependency> idea中为什么这个变黄色

在IDE中&#xff0c;当你的代码出现黄色高亮时&#xff0c;通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说&#xff0c;黄色高亮可能有以下几种原因&#xff1a; 依赖项未找到&#xff1a;黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…...

SA8000 社会责任要求之健康安全准则

【SA8000 社会责任要求之健康安全准则】 健康和安全 准则 3.1 组织应提供一个安全和健康的工作环境&#xff0c;并应采取有效的措施防止潜在的健康和安全事故和职业伤害&#xff0c;或在工作的过程中发生的或引起的疾病。基于产业相关的安全与健康的知识以及任何特定的危害&…...

SpringMVC的架构有什么优势?——控制器(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

Box64终极指南:如何在ARM设备上轻松运行x86程序?三个简单步骤解锁无限可能

Box64终极指南&#xff1a;如何在ARM设备上轻松运行x86程序&#xff1f;三个简单步骤解锁无限可能 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_m…...

C++ `dynamic_cast

1. 基础 C类型转换概览为什么需要dynamic_cast 2. dynamic_cast 的使用 基本语法与其他类型转换&#xff08;如 static_cast、reinterpret_cast 和 const_cast&#xff09;的对比 3. RTTI (运行时类型信息) 什么是RTTI如何在C中启用和禁用RTTI 4. dynamic_cast 与多态 使用dyna…...

FigmaCN中文界面本地化解决方案:解决设计师语言障碍的技术实现

FigmaCN中文界面本地化解决方案&#xff1a;解决设计师语言障碍的技术实现 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 对于中文设计师和开发团队来说&#xff0c;Figma作为一款国际…...

保姆级教程:用Ucinet和Data数据园搞定CNKI文献关键词共现分析(附数据清洗技巧)

学术研究者的文献计量分析实战指南&#xff1a;从CNKI数据到知识图谱可视化 在当今信息爆炸的时代&#xff0c;学术研究者面临的最大挑战之一是如何从海量文献中快速识别研究热点和知识结构。文献计量分析作为一种量化研究方法&#xff0c;能够帮助学者们系统性地梳理领域发展脉…...

告别触摸屏开发烦恼:手把手教你用tslib 1.16搞定嵌入式Linux触摸校准与Qt适配

嵌入式Linux触摸屏开发实战&#xff1a;从tslib校准到Qt适配全解析 在工业控制、医疗设备和智能终端等嵌入式场景中&#xff0c;触摸屏作为最直接的人机交互方式&#xff0c;其精度和响应速度直接影响用户体验。然而在实际开发中&#xff0c;工程师们常会遇到触摸坐标漂移、点击…...

告别实车测试!手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试环境(附避坑指南)

新能源汽车OBC/DCDC控制器HIL测试环境搭建实战指南 在新能源汽车三电系统开发中&#xff0c;车载充电机(OBC)和DC/DC变换器的功能验证一直是工程师面临的挑战。传统实车测试不仅成本高昂&#xff0c;而且难以覆盖所有边界条件。硬件在环(HIL)测试技术通过将真实控制器接入虚拟车…...

从零搭建OpenStack私有云:我是如何用两台旧电脑打造个人开发测试平台的

从零搭建OpenStack私有云&#xff1a;我是如何用两台旧电脑打造个人开发测试平台的 去年整理仓库时发现两台闲置的旧台式机&#xff0c;配置都是i5-6500加16GB内存。看着它们积灰实在可惜&#xff0c;我决定用这两台"老伙计"搭建一个OpenStack私有云环境&#xff0c;…...

深度解析Clarity AI超分辨率架构:从算法原理到实战优化指南

深度解析Clarity AI超分辨率架构&#xff1a;从算法原理到实战优化指南 【免费下载链接】clarity-upscaler Clarity AI | AI Image Upscaler & Enhancer - free and open-source Magnific Alternative 项目地址: https://gitcode.com/GitHub_Trending/cl/clarity-upscale…...

为什么你的Windows Phone需要解锁引导加载程序?深度解析WPinternals的3大核心价值

为什么你的Windows Phone需要解锁引导加载程序&#xff1f;深度解析WPinternals的3大核心价值 【免费下载链接】WPinternals Tool to unlock the bootloader and enable Root Access on Windows Phones 项目地址: https://gitcode.com/gh_mirrors/wp/WPinternals 你是否…...

STM32F407 HAL库驱动42步进电机:从CubeMX配置到代码调试的完整避坑指南

STM32F407 HAL库驱动42步进电机&#xff1a;从CubeMX配置到代码调试的完整避坑指南 在嵌入式开发领域&#xff0c;步进电机控制一直是工业自动化、3D打印和机器人控制等应用中的核心技术。对于刚接触STM32系列微控制器的开发者来说&#xff0c;使用HAL库驱动42步进电机可能会遇…...