事务功能
Redis通过MULTI、EXEC、WATCH等命令来实现**事务(transaction)**功能
事务的特性:
- 事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制
- 并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求
- Redis事务不支持回滚机制,具体见ACID原子性:
事务的错误处理:
- 如果事务中的命令是在执行期间出现了错误,事务的后续命令也会继续执行下去,并且之前执行的命令也不会有任何影响
- 事务因为命令入队出错而被服务器拒绝执行,事务中的所有命令都不会被执行
错误处理具体见下一篇文章。
以下是一个事务执行的过程,该事务首先以一个MULTI命令为开始,接着将多个命令放 入事务当中,最后由EXEC命令将这个事务提交(commit)给服务器执行:
事务的流程
- 事务开始
- 命令入队
- 事务执行
一、事务开始(MULTI命令)
- MULTI命令的执行标志着事务的开始:
MULTI命令可以将执行该命令的客户端从非事务状态切换至事务状态,这一切换是通过在客户端状态的flags属性中打开REDIS_MULTI标识来完成的,MULTI命令的实现可以用以 下伪代码来表示:
def MULTI():
# 打开事务标识
client.flags |= R