redis事务

概述

  一组命令的集合,要么都执行,要么都不执行.同命令一样,是Redis的最小执行单位.
  

原理

  先将属于同一事务的命令发送给Redis,然后让Redis依次执行这些命令(FIFO).

实例

1
2
3
4
5
6
7
8
9
redis> MULTI
OK
redis> SADD "user:1:following" 2
QUEUED
redis> SADD "user:2:followers" 1
QUEUED
redis> EXEC
1) (interger) 1
2) (interger) 1

  MULTI命令告诉Redis,下面的命令属于同一事务.
  当输入一条命令,Redis返回QUEUED,表示该命令已经进入等待执行的事务队列中了.
  当事务队列里的所有命令被执行完之后,EXEC命令会将回复队列作为自己的执行结果返回给客户端,客户端从事务状态返回到非事务状态,至此,事务执行完毕。
  如果在发送EXEC命令前客户端掉线了,则Redis会请空事务队列,所有命令都不执行;一旦服务器端收到了EXEC,所有的命令就都会被执行.

错误处理

  包括语法错误运行错误.
  如果事务队列中的命令存在语法错误(指令不存在或者参数不对),执行EXEC后Redis会返回错误,连语法正确的命令也不会执行.这种错误的命令在输入时,Redis就会提示你error信息.
  运行错误,是指那些在输入时Redis不会返回error提示信息的命令.例如,使用散列命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的.如果一条命令出现了运行错误,事务里的其它命令依然会被执行.
  Redis事务没有回滚功能.开发者需要自己处理错误,恢复数据库.

错误预防

  对于语法错误,完全可以在开发时找到并解决;
  对于运行错误,可以做的是,合理规划数据库(保证键名规范等)