事务transaction是一组命令集合,同基本的原子命令一样是最小的执行单位,一个事务中的所有命令要么都执行,要么都不执行。
1 事务命令
Redis中事务由一个命令发送给Redis,然后Redis依次执行这些命令。事务命令如下
redis> multi -------进入事务模式
OK
redis> 要执行的命令 --------缓存命令
QUEUED
redis> 要执行的命令
QUEUED
redis> exec ----------执行命令
exec命令的返回值是缓存的事务中所有命令的执行结构,返回值顺序和命令的顺序一致。可以使用result[index]获得其中命令的结果。
2 错误处理
- 语法错误:缓存命令中存在语法错误,比如命令不存在或参数不对。Redis会直接返回错误,所有命令都不会执行
- 运行错误:命令执行时的错误,如果事务中一条命令出现了该错误,其他命令依然会继续执行。(没有数据库的回滚功能)
3 watch命令
watch可以监控一个或多个key,一旦其中一个key被修改或删除,之后的事务就不会执行。监控一直持续到exec命令。
如下面命令:127.0.0.1:6379> watch key
OK
127.0.0.1:6379> set key 2 ----------事务外修改
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set key 3 ------------事务中不能修改,因为已经修改了
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get key
"2"