redis事务
概述
一组命令的集合,要么都执行,要么都不执行.同命令一样,是Redis的最小执行单位.
原理
先将属于同一事务的命令发送给Redis,然后让Redis依次执行这些命令(FIFO).
实例
1 | redis> MULTI |
MULTI命令告诉Redis,下面的命令属于同一事务.
当输入一条命令,Redis返回QUEUED,表示该命令已经进入等待执行的事务队列中了.
当事务队列里的所有命令被执行完之后,EXEC命令会将回复队列作为自己的执行结果返回给客户端,客户端从事务状态返回到非事务状态,至此,事务执行完毕。
如果在发送EXEC命令前客户端掉线了,则Redis会请空事务队列,所有命令都不执行;一旦服务器端收到了EXEC,所有的命令就都会被执行.
错误处理
包括语法错误和运行错误.
如果事务队列中的命令存在语法错误(指令不存在或者参数不对),执行EXEC后Redis会返回错误,连语法正确的命令也不会执行.这种错误的命令在输入时,Redis就会提示你error信息.
运行错误,是指那些在输入时Redis不会返回error提示信息的命令.例如,使用散列命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的.如果一条命令出现了运行错误,事务里的其它命令依然会被执行.
Redis事务没有回滚功能.开发者需要自己处理错误,恢复数据库.
错误预防
对于语法错误,完全可以在开发时找到并解决;
对于运行错误,可以做的是,合理规划数据库(保证键名规范等)