Skip to main content

3.Redis事务

Redis事务

Redis支持事务,使用MULTI、EXEC、DISCARD和WATCH命令来执行一系列操作,保证这些操作在执行时是原子的。

Redis事务原子性:即事务中的所有命令要么全部执行,要么全部不执行。Redis事务不支持回滚到保存点,即无法在事务中途进行回滚。

MULTI命令

  • MULTI 命令用于开启一个事务块。在执行 MULTI 命令之后,Redis会将后续的命令都放入一个队列中,直到 EXEC 命令被调用。
MULTI

命令入队

  • 在执行 MULTI 命令之后,后续的命令都会被放入一个队列中,而不是立即执行。
MULTI
SET key1 "value1"
GET key1

EXEC命令

  • EXEC 命令用于执行事务中的所有命令。如果在执行事务过程中没有发生错误,那么所有的命令都会被执行,否则所有命令都不会执行。
EXEC

DISCARD命令

  • DISCARD 命令用于取消事务,清空事务队列中的所有命令。
DISCARD

WATCH命令

  • WATCH 命令用于监视一个或多个键,如果在事务执行前这些键被其他命令所改动,事务将被打断。
WATCH key1 key2

事务示例

  • 示例展示了一个简单的Redis事务,包含设置键值对和获取键值对两个操作。
MULTI
SET key1 "value1"
GET key1
EXEC

事务回滚

  • 如果在 EXEC 执行之前,有任何错误发生,Redis将回滚事务。例如,如果某个命令包含语法错误,整个事务都会被回滚。

WATCH命令的应用

  • WATCH 命令通常用于实现乐观锁。通过监视某些键,如果这些键的值在执行事务前被其他客户端修改,事务将被打断。