事务transaction是一组命令集合,同基本的原子命令一样是最小的执行单位,一个事务中的所有命令要么都执行,要么都不执行。

1 事务命令

Redis中事务由一个命令发送给Redis,然后Redis依次执行这些命令。事务命令如下

  1. redis> multi -------进入事务模式
  2. OK
  3. redis> 要执行的命令 --------缓存命令
  4. QUEUED
  5. redis> 要执行的命令
  6. QUEUED
  7. redis> exec ----------执行命令

exec命令的返回值是缓存的事务中所有命令的执行结构,返回值顺序和命令的顺序一致。可以使用result[index]获得其中命令的结果。

2 错误处理

  • 语法错误:缓存命令中存在语法错误,比如命令不存在或参数不对。Redis会直接返回错误,所有命令都不会执行
  • 运行错误:命令执行时的错误,如果事务中一条命令出现了该错误,其他命令依然会继续执行。(没有数据库的回滚功能)

    3 watch命令

    watch可以监控一个或多个key,一旦其中一个key被修改或删除,之后的事务就不会执行。监控一直持续到exec命令。
    如下面命令:
    1. 127.0.0.1:6379> watch key
    2. OK
    3. 127.0.0.1:6379> set key 2 ----------事务外修改
    4. OK
    5. 127.0.0.1:6379> multi
    6. OK
    7. 127.0.0.1:6379> set key 3 ------------事务中不能修改,因为已经修改了
    8. QUEUED
    9. 127.0.0.1:6379> exec
    10. (nil)
    11. 127.0.0.1:6379> get key
    12. "2"