redis事务和传统关系数据库的事务并不相同。在关系数据库中,用户首先向数据库服务发送begin,然后执行各个相互一致的写操作和读操作。最好,可以选择发送commit来确认之前所做的修改,或者发送rollback来放弃那些修改。redis的事务以特殊命令mulit开始,之后跟着用户传入的多个命令,最好以exec结束。redis在执行事务的过程中,会延迟执行已入队的命令直到客户端发送exec命令为止。
在使用python客户端时,会等到事务所包含的所有命令都出现了之后,才一次性将mult命令,要在事务中执行的一系列命令,以及exec命令全部发送给redis,然后等待直到接收到所有命令的回复为止。这种“一次性发送多个命令,然后等待所有回复出现”的做法通常被称为流水线,它可以通过减少客户端与redis服务器之间的网络通信次数来提升redis在执行多个命令时的性能。
redis在一次单独步骤中执行一组命令,并且可以保证如下两个重要事项:
> Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。 > 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。
与实务相关命令介绍:
WATCH命令:
在使用watch命令对键进行监视之后,直到用户执行exec命令的这段时间里,如果有其他用户抢先对任何被监视的键进行了替换,更新,删除操作,那么当用户尝试执行exec命令的时候,事务将失败并返回一个错误。