引言
redis的事务主要有以下几个命令:multi、exec、discard、watch、unwatch。
简单介绍
redis的事务有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务施行中不会被其他客户端送来的命令请求打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行
机制:
- 使用multi开始一个事务之后,后面的命令会按顺序进入队列。如果命令的语法检查失败,那么会入队失败。redis只会执行入队成功的命令。
- 客户端开始multi后,因为断线没有执行exec,那么事务中的所有命令都不会被执行
注意!redis会执行所有入队成功的命令,遇到失败的会跳过,并且执行之后的命令
命令介绍
开始一个事务
multi
执行一个事务,这个命令总是在multi后面执行。此命令会释放所有watch的key
exec
放弃事务。此命令会释放所有watch的key
discard
监视一个key,相当于乐观锁
watch key [key…]
放弃监视的所有key
unwatch
使用介绍
正常操作
> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1
放弃执行事务
> SET foo 1
OK
> MULTI
OK
> INCR foo
QUEUED
> DISCARD
OK
> GET foo
"1"
使用乐观锁执行事务
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC