redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行
redis事务命令
multi:标志事务的开始。
exec:执行事务命令,命令的回复是一个数组, 数组中的每个元素都是执行事务中的命令所产生的回复。
discard:清空事务队列,退出事务状态。
watch:锁定key值,直到执行了multi或者exec命令。如果监控了某个key值,同时在接下来的事务中对key值有修改,那么执行事务前,其他客户端如果修改了该key值,那么执行事务时会失败。需要生效,则重新执行事务。这个场景的描述就是乐观锁。
exec被调用时, 不管事务是否成功执行, 对所有键的监视都会被取消。
unwatch:去除监控状态。
使用 AOF 方式做持久化的时候, Redis 会使用单个 write 命令将事务写入到磁盘中。然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。使用redis-check-aof程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。
redis事务中只要有一条命令中显示地报错之后,虽然后面的命令也可以入队列,但是最后整个队列的命令都不会执行。这里对string类型使用incr命令,显示报错。
而另外一种情况,事务命令输入过程中虽然没报错,但是执行的时候报错,这个时候这条执行出错的命令未执行,其余正常的命令执行生效。下面就是用hash的命令操作string类型的key值。
正如前面描述,redis事务执行失败,不会进行回滚,而是继续执行后面的命令。