Redis之Redis事务
Redis事务的概念:
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
Redis事务没有隔离级别的概念:
批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。
Redis不保证原子性:
Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。
Redis事务的三个阶段:
- 开始事务
- 命令入队
- 执行事务
Redis事务相关命令:
watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
multi : 标记一个事务块的开始( queued )
exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 )
discard : 取消事务,放弃事务块中的所有命令
unwatch : 取消watch对所有key的监控
Redis事务使用案例:
(1)正常执行
(2)放弃事务
(3)若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行
(4)若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。
(5)使用watch
案例一:使用watch检测balance,事务期间balance数据未变动,事务执行成功
案例二:使用watch检测balance,在开启事务后(标注1处),在新窗口执行标注2中的操作,更改balance的值,模拟其他客户端在事务执行期间更改watch监控的数据,然后再执行标注1后命令,执行EXEC后,事务未成功执行。
一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。
故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。
总结:
watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。
转载于:https://www.cnblogs.com/DeepInThought/p/10720132.html
Redis之Redis事务相关推荐
- Redis初学:14(Redis中的事务)
Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...
- redis中的事务、lua脚本和管道的使用场景
https://blog.csdn.net/fangjian1204/article/details/50585080 事务 redis中的事务并不像mysql中那么完美,只是简单的保证了原子性.re ...
- Redis事务,ACID性质,但是Redis不支持事务回滚
ACID性质 1.原子性 事物具有原子性指的是,数据库将事务中的多个操作当做一个整体来执行,服务器要么执行事务中的所有操作,要么就一个操作也不执行. 对于Redis的事务功能来说,事务队列中的命令要么 ...
- 跟我一起学Redis之Redis事务简单了解一下
前言 关系数据库中的事务,小伙伴们应该是不陌生了,不管是在开发还是在面试过程中,总有两个问题逃不掉: •说说事务的特性:•事务隔离级别是怎么一回事? 事务处理不好,数据就可能不准确,最终就会导致业务出 ...
- redis笔记——redis事务及锁应用
1.redis支持简单的事务 2.redis 和 mysql事务的对比 Mysql Redis 开启 start transaction multi(并不执行,放在一个队列里) 语句 普通sql 普通 ...
- Redis持久化_Redis事务_Redis删除策略
Redis持久化 Redis包含3中持久化方案: RDB, AOF, RDB与AOF混合使用 RDB RDB: 将内存中数据生成快照形式, 将其保存到.rdb文件中, 关注点是数据 使用命令执行RDB ...
- Redis之Redis的事务
1.Redis的事务是什么 Redis 事务的本质是一组命令的集合,事务支持一次执行多个命令,一个事务中所有命令都会被序列化.(redis事务就是一次性.顺序性.排他性的执行一个队列中的一系列命令). ...
- Redis的基础事务
Redis 存在事务,尽管它没有数据库那么强大,但是它还是很有用的,尤其是在那些需要高并发的网站当中. 使用 Redis 读/写数据要比数据库快得多,如果使用 Redis 事务在某种场合下去替代数据库 ...
- redis 安全 备份 事务
目录 安全 备份 事务 安全 对于数据库来说,安全性是非常重要的,这时候就要提供身份验证,以便客户端想要建立连接时进行身份验证 语法 config set requirepass "123& ...
- php redis事务回滚,【Redis】Redis事务详解,Redis事务不支持回滚吗?
1.redis事物参考:https://baijiahao.baidu.com/s?id=1613631210471699441&wfr=spider&for=pc (php操作red ...
最新文章
- json字符串的理解
- 手把手教你怎么在linux安装c++编译器
- 基于CNN的阅读理解式问答模型:DGCNN
- Python基础概念_7_数据结构
- Linux实时查看进程命令top笔记
- c++调用python找不到py文件的可能原因
- 《JSON笔记之二》----封装JSONUtil
- matplotlibpycharm
- mongoose和mongodb的几篇文章 (ObjectId,ref)
- 下一版本的Android OS ——Jelly Bean
- dBm与功率(w)换算关系!
- 免费好用的的在线代码IDE网站,支持python
- oracle locked time,Oracle里面的用户无法登录 LOCKED(TIMED)解决方法
- 如何解决搜狗浏览器自动填充
- css-3d旋转(三维立体效果)
- 计算机公式求时间差公式,excel时间差计算公式有哪些 excel怎么快速计算时间差...
- 高数 | 为什么f(x)从a到b的积分等于从b到a的积分的相反数?
- 屏幕显示密度dpi_屏幕dpi是什么意思?
- 【四】Spring源码分析之启动主流程---AbstractApplicationContext的refresh方法
- 细数云计算产品和技术-云计算安全
热门文章
- C#控制 计算机中“服务”的启动与停止 转
- vb代码转换为java_有人可以解释如何使用JACOB将VB代码转换为Java吗?
- Service worker 的概念和用法
- Oracle PL/SQL之NEXT_DAY - 取得下一个星期几所在的日期
- 学python的注意点_python学习入门细节知识点
- 用户提需求要把自己文集内的全部文章一键全部转换为私密。我该不该听他的?...
- esri-leaflet入门教程(3)-自定义底图
- 代码提示(支持3.X和4.X)—ArcGIS API forJavaScript
- 如何营造游戏的打击感
- StarlingMVC:为Starling量身打造的MVC框架