十七、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数据未变动,事务执行成功
127.0.0.1:6379>set balance 100
127.0.0.1:6379>set debt 0
案例二:使用watch检测balance,在开启事务后(标注1处),在新窗口执行标注2中的操作,更改balance的值,模拟其他客户端在事务执行期间更改watch监控的数据,然后再执行标注1后命令,执行EXEC后,事务未成功执行。
一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。
故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。
总结:
watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。
十七、Redis事务相关推荐
- redis学习之——Redis事务(transactions)
Redis事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的,所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 常用命令:MULTI 开启事务 EXEC 提交事务 ...
- 腾讯二面:Redis 事务支持 ACID 么?
❝ 腾讯面试官:「数据库事务机制了解么?」 「内心独白:小意思,不就 ACID 嘛,转眼一想,我面试的可是技术专家,不会这么简单的问题吧」 程许远:「balabala-- 极其自信且从容淡定的说了一通 ...
- 图解Redis事务机制
来自:Java中文社群 作为关系型数据库中一项非常重要的基础功能--事务,在 Redis 中是如何处理并使用的? 1.前言 事务指的是提供一种将多个命令打包,一次性按顺序地执行的机制,并且保证服务器只 ...
- 【带你重拾Redis】Redis事务
Redis事务 Redis的事务主要依赖于WATCH ,UNWATCH,MULTI , EXEC, DISCARD等命令. 其中 MULTI , EXEC , DISCARD 分别对应关系型数据库的 ...
- redis中有key但是删不掉_一篇图文,搞定Redis事务
在面试的时候,通常会被问到redis是如何实现分布式锁的.如果我们只知道是借助于setnx/setex ,而不了解setnx/setex底层如何实现,那基本上是无法过关的,尤其是大厂.那究竟redis ...
- Redis事务和watch
redis的事务 严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的. redis中的事务定义 Redis中的事务(transaction)是一组命令的集合. 事务同 ...
- Redis - 事务
一.概述 和传统关系型数据库一样,Redis 同样是支持事务的.Redis 的事务可以通过 MULTI/EXEC/DISCARD/WATCH 等命令来实现. 二.事务的 ACID 特性 1). 原子性 ...
- python redis事务_python redis事务源码及应用分析
在多个客户端同时处理相同的数据时,不谨慎的操作很容易导致数据出错.一般的关系型数据库中有事务保证了数据操作的原子性,同样Redis中也设置了事务,可以理解为"将多个命令打包,然后一次性.按顺 ...
- Redis事务(transaction)
Redis事务(transaction) 本文档翻译自: http://redis.io/topics/transactions . MULTI . EXEC . DISCARD 和 WATCH 是 ...
最新文章
- 7、Spring -Cloud-路由网管Spring Cloud Zuul
- 01_Difference between case object and object
- 自定义控件:旋转菜单
- numpy.zeros详解
- Oracle业务适合用PostgreSQL去O的一些评判标准
- 理解分布式一致性:拜占庭容错与PBFT
- SQL Server Query界面不能录入中文
- SAP ABAP刷新ALV 渲染刷新 (我也不太懂,反正就这么写了)
- inventor如何钣金出弧面_Inventor教程之钣金多规则
- matlab lj( )函数,matlab 函数调用问题
- SVD decomposition and polar decomposition
- 说不尽的 π —— π 的近似计算
- Python装饰器之一
- OpenResty-ngx.var变量
- PHP中header和session_start前不能有输出的原因
- bzoj 4516: [Sdoi2016]生成魔咒
- iOS 各种证书/签名详解
- java encapsulation_Java Encapsulation vs Abstraction
- PyCharm选择性忽略PEP8代码风格警告信息
- 24点问题(增加数据)·回溯
热门文章
- java default locale_Java JSON.defaultLocale方法代码示例
- 怎么修照片多余的部分_PS教程旧照片翻新修复技巧
- python set没有顺序_Python一题多解学思路:指定列前置
- 测评结果_刚刚,2018全国文明城市测评结果重磅公布!你的家乡排第几?
- 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
- 新计算机教师工作随笔反思,信息技术反思随笔 (2)
- 皮一皮:这个老爸有觉悟...
- 微信突然更新,新增了这些功能...
- 某生鲜电商平台的监控模块设计
- Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞