redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令。
1.事务命令
mullti
...
...
exec
当把所有要在同一事务中执行的命令都发给Redis后,使用exec命令将等待执行的事务队列中的所有命令按照发送顺序依次执行。exec命令的返回值就是这些命令的返回值组成的列表,返回值顺序和命令的顺序相同。
2.错误处理
(1)语法错误。语法错误指命令不存在或者命令参数的个数不对。
只要有一个命令有语法错误,执行exec命令后redis就会直接返回错误,连语法正确的命令也不会执行。
(2)运行错误。运行错误指在命令执行时出现的错误,这种错误在实际执行之前redis是无法发现的,所以在事务里这样的命令是会被redis接受并执行的。如果事务里的一条命令出现了运行错误,事务里的其他命令依然会继续执行(包括出错命令之后的命令)。
redis事务没有关系数据库提供的回滚(rollback)功能。
3.watch命令
watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到exec命令。事务中的命令是在exec之后执行的,所以在multi命令后可以修改watch监控的键值。
set wa 1
watch wa
set wa 2
multi
set wa 3
set we 2
exec
在执行watch命令后,执行事务前修改了key值,所以最后事务中的命令全部不执行,exec返回空结果。
执行exec命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用unwatch命令来取消监控。