事务

命令

  • MULTI:开始事务,redis不允许嵌套事务

  • EXEC:执行事务

  • DISCARD:取消事务

  • WATCH :只能在客户端进入事务状态之前执行, 在事务状态下发送 WATCH 命令会引发一个错误, 但它不会造成整个事务失败, 也不会修改事务队列中已有的数据(和前面处理 MULTI 的情况一样)。

阶段

  1. 开启事务

  2. 命令入队

  3. 执行事务

redis> MULTI
OK

redis> SET book-name "Mastering C++ in 21 days"
QUEUED

redis> GET book-name
QUEUED

redis> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis> SMEMBERS tag
QUEUED

redis> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

ACID

原子性

redis事务在执行的中途遇到错误,不会回滚,而是继续执行后续命令。不满足原子性。

持久性

事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能,所以事务的持久性由 Redis 所使用的持久化模式决定。RDB、AOF。

隔离性

redis事务在执行的过程中,不会处理其它命令,而是等所有命令都执行完后,再处理其它命令。满足隔离性。

一致性

redis事务在执行过程中发生错误或进程被终结,都能保证数据的一致性。

Last updated