事务

概述

1、Redis 事务是一个单独的隔离操作

(1)事务中的所有命令都会序列化、按顺序地执行

(2)事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

2、主要作用:串联多个命令,防止别的命令插队

3、使用乐观锁(CAS)实现

 

Multi、Exec、Discard

1、从输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行

2、组队的过程中可以通过 discard 来放弃组队

 

事务的错误处理

1、组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消

2、如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚

 

MULTI

1、标记一个事务块的开始,随后的指令将在执行 EXEC 时作为一个原子执行

2、始终返回 OK

 

EXEC

1、执行事务中所有在排队等待的指令,并将链接状态恢复到正常

2、当使用 WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC 会被执行

3、每个元素与原子事务中的指令一一对应,当使用 WATCH 时,如果被终止,EXEC 则返回一个空的应答集合

 

WATCH key [key ...]

1、标记所有指定 key 被监视起来,在事务中有条件的执行(乐观锁)

2、在执行 multi 之前,先执行 watch key1 [key2],可以监视一个(或多个)key,如果在事务执行之前,指定 key 被其他命令所改动,那么事务将被打断

3、总是返回 OK

 

UNWATCH

1、刷新一个事务中已被监视的所有 key

2、如果执行 EXEC 或 DISCARD, 则不需要手动执行 UNWATCH

3、总是返回 OK

 

特性

1、单独的隔离操作

(1)事务中的所有命令都会序列化、按顺序地执行

(2)事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

2、没有隔离级别的概念:队列中的命令没有提交之前都不会实际被执行

3、不保证原子性:事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

posted @   半条咸鱼  阅读(103)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示