Redis系列之事务机制

什么是Redis事务

学习mysql数据库的时候,我们知道了事务的ACID特性,Redis也是支持事务的,不过和数据库的事务又有什么区别?在mysql数据库中,我们使用begin开启事务,提交是commit,回滚是rollback,然后Redis中的事务是怎么一回事?redis的事务其实可以看做是一组命令按照顺序,串行执行队列中的命令,其它客户端的命令不会写入到这个队列中。总的来说,redis事务就是一次性、顺序性、排他性的执行一个队列中的一组命令

redis事务相关命令和使用

MULTI 、 EXEC 、 DISCARD 和 WATCH、UNWATCH命令是redis实现事务需要的命令

  • multi:开启事务,事务开启后,事务中的多条命令会排队,等事务提交
  • discard:取消事务,放弃执行队列里的所有命令
  • exec:执行事务里的所有命令
  • watch:监控一个或者多个key,如果事务提交之前,这个key被其它客户端修改了,这个事务就不会提交
  • unwatch: 取消watch对所有key的监视

redis事务例子

  • 正常的事务执行过程
127.0.0.1:0>multi
"OK"127.0.0.1:0>incr testid
"QUEUED"127.0.0.1:0>exec1)  "1"
  • 语法错误导致的事务回滚
127.0.0.1:0>multi
"OK"127.0.0.1:0>incr testid
"QUEUED"127.0.0.1:0>seta a
"ERR unknown command `seta`, with args beginning with: `a`, "127.0.0.1:0>exec
"EXECABORT Transaction discarded because of previous errors."
  • 对string类型进行incr
    对一个key先设置为string类型的,然后使用incr命令进行递增,再提交事务,出现错误
127.0.0.1:0>set testid aa
"OK"127.0.0.1:0>multi
"OK"127.0.0.1:0>incr testid
"QUEUED"127.0.0.1:0>exec1)  "ERR value is not an integer or out of range"
  • 手动回滚
127.0.0.1:0>multi
"OK"127.0.0.1:0>incr id
"QUEUED"
127.0.0.1:0>discard
"OK"
  • watch命令使用
    watch命令有点像cas锁,check-and-set,事务开启后,其它客户端更改了值,事务不执行
127.0.0.1:0>watch id
"OK"
127.0.0.1:0>multi
"OK"
127.0.0.1:0>set id 1
"QUEUED"
127.0.0.1:0>get id
"QUEUED"

另外一个客户端设置key的值

127.0.0.1:0>set id 2
"QUEUED"

客户端1再提交事务

127.0.0.1:0>exec(nil)

redis事务特点

  • 命令是原子性的,在执行事务中的指令时,不能执行其它指令,但是redis是保证分布式的ap模式的,不能保证cp特性,所以一般对业务要求严格的也不采用redis事务
  • redis事务可以在一定程度保证原子性,但是不能获取事务中间指令的结果,然后再决定后面的执行逻辑,所以这种业务场景也不适用,这时候可以使用lua脚本来实现

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

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

相关文章

在linux上基于shell自动部署Java项目

一,安装git yum list git 列出git安装包 yum install git 在线安装git 使用 git -varsion 查看是否安装成功 安装成功 二, Git克隆代码 git clone 远程仓库地址 三,创建shell脚本 touch shell.sh shell脚本 #!/bin/sh echo echo 自动…

健康手表数据洞察台

健康手表数据洞察台 1. 背景介绍2. 数据获取与处理3. Django平台搭建4. 数据可视化5. 整体数据分析6. 数据监控与紧急警报7. 用户界面优化8. 创新点结语 1. 背景介绍 在当今健康意识不断提升的社会,人们越来越关注身体健康。本文将介绍如何使用Pandas进行数据分析&…

NTC和温度的关系

一、NTC介绍 NTC(nagative temperature coefficient)负温度系数的热敏电阻。随着温度的升高,电阻越来越小 二、NTC和温度的关系 生产NTC的厂家会提供一个RT表格,里面记录了温度和电阻的关系,他们的关系是一一对应的…

C# 使用FluentHttpClient请求WebApi

写在前面 FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,采用流式编程,可以将所有请求所需的参数一次性发送,并直接获取序列化后的结果。 老规矩从NuGet上安装该类库: 这边一定要认准是 P…

React系列:配置@别名路径并配置联想

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥网站…

读写分离之同步延迟测试

背景 读写分离是快速提高数据库性能的手段,主库只负责写入,从库负责查询。但在性能得到提升的同时,编程的复杂度就会提升。由其碰到主从同步延迟的情况,在数据写入后,在从库无法读取到最新数据,会对业务逻…

汽车火花塞行业分析:全球市场需求量约为26.3亿个

在汽车日常保养里,更换火花塞算是比较常见的一种,爱车懂车的车主们都非常清楚火花塞对于汽车的重要性,可以说火花塞直接影响到发动机的运作,决定了汽车能否顺利启程。 火花塞(sparkplug),俗称火咀,它的作用是把高压导线(火嘴线)送来的脉冲高压电放电&…

zkSend — — 在Sui上发红包像发电子邮件一样简单

*12月14日,知名区块链媒体平台The Block发表了这篇关于对Mysten Labs联合创始人Adeniyi Abiodun的采访,文中“我们”指代该媒体,数据均为截止撰写文章时数据,以下是正文。 两年前,当五名前Facebook工程师创立Mysten L…

MySQL数据库 函数

目录 函数概述 字符串函数 数值函数 日期函数 流程函数 函数概述 函数是指一段可以直接被另一段程序调用的程序或代码。也就意味着,这一段程序或代码在MysQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即…

【GPU监控】Gpu-dcgm-exporter 监控

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

算法:二叉树最大深度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、问题描述 二、递归算法 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、问题描述 给定一个二叉树,求其最大深度 3…

git运用之.gitignore 配置文件的常用写法及案例

前言 .gitignore 文件用于指定 Git 版本控制系统忽略的文件和文件夹。 常见的 .gitignore 配置文件的写法和案例 忽略特定文件: # 忽略所有 .log 文件 *.log # 忽略名为 .DS_Store 的文件 .DS_Store忽略特定文件夹: # 忽略名为 node_modules 的…

【问题思考总结】I/O总线的数据线和控制线的辨析【2012年 408真题 T21】

个人经过查阅资料发现,王道给的图好像挺有误导性的,比如,I/O总线中的地址总线应该是单向传输的,但是,在他的图例里面是双向的。文章若有错误,恳请指正,感激不尽。 问题 在做2012年408真题的时候…

如何提高股票交易速度?极速交易哪家好?

极速交易模式是一种交易方式,它以最短的时间进行快速交易。这种模式通常用于贵金属、外汇、原油、期权等金融产品的交易。 在极速交易模式中,交易者可以在最短时间内进行买卖操作,从而快速获取利润。这种交易方式通常需要高超的技术和经验&a…

【03】GeoScene创建海图或者电子航道图数据

1 配置Nautical属性 1.1 管理长名称 长名称(LNAM)是一个必要的对象标识符,是生产机构(AGEN)、要素识别号码(FIDN)和要素识别子项(FIDS)组件的串联。这三个子组件用于数…

【Spring】09 BeanClassLoaderAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将聚焦于其中的一个接口 BeanClassLoaderAware,介…

11889个字带你彻底弄清tcp/ip协议栈

tcpip协议栈 tcpip模型以太网协议ARP地址解析协议TCP协议 tcpip模型 OSI模型linux tcpip模型常用协议网络设备应用层应用层telnet/DHCP/TFTP/FTP/MQTT/NFS/DNS/FTP/SNMP表示层会话层传输层传输层TCP/UDP四层交换机网络层网络层IP/ICMP/IGMP/ARP路由器,三层交换机…

【LeetCode】383. 赎金信(String的遍历)

今日学习的文章链接和视频链接 leetcode题目地址:383. 赎金信 代码随想录题解地址:代码随想录 题目简介 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返…

01|LangChain系统安装和快速入门

01|LangChain系统安装和快速入门 什么是大语言模型 大语言模型是一种人工智能模型,通常使用深度学习技术,比如神经网络,来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多,可以达到数十亿甚至更多&am…

C++入门【10-C++ 函数】

C 函数 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上&#xff0c…