查看网站是否被k,怎么免费注册公司,网站开发文档模板下载,阿里云WordPress主题目录
一、redis事务定义
二、事务控制命令——Multi、Exec、discard
三、事务的错误处理
四、事务的冲突问题
悲观锁
乐观锁
WATCH
unwatch
五、事务特性
单独的隔离操作
没有隔离级别的概念
不保证原子性 一、redis事务定义
Redis 事务是一个单独的隔离操作…目录
一、redis事务定义
二、事务控制命令——Multi、Exec、discard
三、事务的错误处理
四、事务的冲突问题
悲观锁
乐观锁
WATCH
unwatch
五、事务特性
单独的隔离操作
没有隔离级别的概念
不保证原子性 一、redis事务定义
Redis 事务是一个单独的隔离操作事务中的所有命令都会序列化、按顺序地执行。
事务在执行的过程中不会被其他客户端发送来的命令请求所打断。
Redis 事务的主要作用就是串联多个命令防止别的命令插队。 二、事务控制命令——Multi、Exec、discard
1、Multi——只记录不执行放入一个队列先进先出顺序去执行
2、Exec——真正的执行提交
3、discard——取消事务
从输入 Multi 命令开始输入的命令都会依次进入命令队列中但不会执行直到输入 Exec 后Redis 会将之前的命令队列中的命令依次执行。
组队的过程中可以通过 discard 来放弃组队。 组队成功提交成功
1
127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k1 v1
QUEUED
127.0.0.1:6379 set k2 v2
QUEUED
127.0.0.1:6379 exec
1) OK
2) OK
127.0.0.1:6379 get k1
v1
127.0.0.1:6379 get k2
v2 2
127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k3 v3
QUEUED
127.0.0.1:6379 set k4 v4
QUEUED
127.0.0.1:6379 discard
OK
127.0.0.1:6379 get k3
(nil)
127.0.0.1:6379 get k4
(nil)
执行失败
1组队阶段报错提交失败的情况有语法问题 记录指令的时候会遇到问题
127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k5 v5
QUEUED
127.0.0.1:6379 set k6
(error) ERR wrong number of arguments for set command
127.0.0.1:6379 set k7 v7
QUEUED
127.0.0.1:6379 exec
(error) EXECABORT Transaction discarded because of previous errors.
2组队成功提交有成功有失败的情况无语法问题 记录指令不会遇到问题执行的时候才会遇到问题
127.0.0.1:6379 multi
OK
127.0.0.1:6379 set k8 v8
QUEUED
127.0.0.1:6379 set k9 v9
QUEUED
127.0.0.1:6379 incr k9
QUEUED
127.0.0.1:6379 set k10 v10
QUEUED
127.0.0.1:6379 exec
1) OK
2) OK
3) (error) ERR value is not an integer or out of range
4) OK
三、事务的错误处理
组队中某个命令出现了报告错误执行时整个的所有队列都会被取消。 如果执行阶段某个命令报出了错误则只有报错的命令不会被执行而其他的命令都会执行不会回滚。 四、事务的冲突问题
悲观锁
悲观锁(Pessimistic Lock)顾名思义就是很悲观每次去拿数据的时候都认为别人会修改所以每次在拿数据的时候都会上锁这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库就用到了很多这种锁机制比如行锁表锁读锁写锁等都是在做操作之前先上锁。
乐观锁
乐观锁(Optimistic Lock)顾名思义就是很乐观每次去拿数据的时候都认为别人不会修改所以不会上锁但是在更新的时候会判断一下在此期间别人有没有去更新这个数据可以使用版本号等机制。乐观锁适用于多读的应用类型这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。
WATCH
在执行 multi 之前先执行 watch key1 [key2] 可以监视一个(或多个) key 如果在事务执行之前这个/些 key 被其他命令所改动那么事务将被打断。
unwatch
用于取消 WATCH 命令对所有 key 的监视。
如果在执行 WATCH 命令之后EXEC 命令或DISCARD 命令先被执行了的话那么就不需要再执行UNWATCH 了。
五、事务特性
Redis 的事务有以下三个特性 单独的隔离操作 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中不会被其他客户端发送来的命令请求所打断。 没有隔离级别的概念 队列中的命令没有提交之前都不会实际被执行因为事务提交前任何指令都不会被实际执行。 不保证原子性 事务中如果有一条命令执行失败其后的命令仍然会被执行没有回滚。 对比MySQL中事务的特性
MySQL中事务特性以及隔离机制_周湘zx的博客-CSDN博客