是什么
可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞!
能干嘛
在一个队列中,一次性、顺序性、排他性的执行一系列命令
Redis事务和数据库事务的区别
-
单独的隔离操作
Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
-
没有隔离级别的概念
因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了
-
不保证原子性
Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
-
排他性
Redis会保证一个事务内的命令依次执行,而不会被其它命令插入
常用命令
-
DISCARD
:取消事务,放弃执行事务块内的所有命令。 -
EXEC
:执行所有事务块内的命令。 -
MULTI
:标记一个事务块的开始。 -
UNWATCH
:取消WATCHMINGLING 对所有key的监视。 -
WATCH key [key...]
:监视一个(或多个)key,如果在事务之前这个(或这些)key被其他命令所改动,那么事务将被打断。
案例
-
正常执行
-
放弃事务
-
全体连坐
-
冤头债主(注意和传统数据库的区别,不一定要么一起成功要么一起失败)
-
watch监控
-
redis使用watch来提供乐观锁定,类似于CAS(check-and-set)
-
watch:
-
初始化k1和balance两个key,先监控再开启multi,保证两key变动在同一个事物内
-
加塞篡改
watch命令是一种乐观锁的实现,Redis在修改的时候会检测数据是否被更改,如果更改了,则执行失败第一个窗口蓝色框第5步执行结果返回为空,也就是相当于是失败
-
-
unwatch:
-
小结:
一旦执行了exec之前加的监控锁都会被取消掉
当客户端连接丢失的时候(比如退出链接),所有东西都会被取消监视。
-
小总结
开启:MULTI开启一个事物。
入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事物队列里面。
执行:由EXEC命令触发事物。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容