Redis事务
Redis事务介绍
【Redis事务,属于简单事务,弱事务,从事务的ACID特性来说】
- Redis的事物通过 MULTI 、EXEC 、DISCARD 和 WATCH 、UNWATCH 这五个命令来完成的。
- Redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合。【事务就是操作命令的集合】
- Redis将命令集合序列化并确保处于同一事物的命令集合连续且不被打断的执行。
- Redis 不支持回滚操作
- 不同于数据库,数据库操作成功全成功,操作失败之前成功的操作也作废
- 举例:
- multi
- set a1 a1
- lpush a1 1 2 3 【语法没错误,但a1已经赋值类型为list】
- exec 【error, 但是 set a1 a1 这句是成功的】
Redis事务命令
MULTI
1.用于标记事务块的开始
2.Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行整个命令序列
EXEC
执行队列命令,然后结束事务
DISCARD
清除队列内容,也就是退出事务了
WATCH
可以对某一个或多个key进行监控,如果监控的key的数据发生变化,那么事务就不执行,否则事务就可以正常执行
啥意思:
1、就是在当前(要进行事务)的客户端 先watch key1
2、multi (开启事务)
3、set key2 val2 (这时候用另一个客户端red-cli 对 set key1 val 修改)
4、exec (提交事务,返回nil 失败)
注意:是在要进行事务的客户端进行 watch , 其他客户端red-cli 进行 watch不会失败的nil
UNWATCH
解除对key的监控
Redis事务为不支持回滚 (为什么呢)
1、大多数事务失败是因为语法错误或者类型错误,这两种错误,在开发阶段都是可以预见的。
2、Redis为了性能方面就忽略了事务回滚。