Redis之事务

简单的说,事务表示一组动作,要么全部执行,要么全部不执行,避免出现数据不一致的情况.

  • Redis提供了简单的事务功能,将一组需要一起执行的命令放到multiexec命令之间 ,multi命令代表事务开始,exec代表事务结束.
>>>multi
>>>sadd user:a:follow user:b
>>>sadd user:a:follow user:b
>>>exec
2.jpg
  • 如果要取消事务的执行,使用discard命令代替exec命令即可.


    3.jpg
  • 如果事务的命令出现错误,不同的错误Redis的处理方法也不同.

如果是语法错误(命令写错等),则会导致整个事务都不执行.

如果是运行时错误,则会导致发生错误之前的代码都会执行,报错的代码和后面的代码不会执行,Redis不支持回滚操作.

  • 有些应用场景需要保证在运行事务之前,事务中的key没有被其他的客户端修改过才执行错误,否则不执行(返回nil),Redis提供watch命令来解决这类问题.
>>>set test "hello"
>>>watch test
>>>multi
>>>append test "python"
>>>append test "redis-py"
>>>set test "moon"       -- 这条命令来自另外一个客户端
>>>exec
(nil)      -- 因为key "test"的值被另外一个客户端改变(watch命令之后,exec命令之前),所以事务不执行.

你可能感兴趣的:(Redis之事务)