Redis Transaction事务

9个月前 (04-27)

Redis 事务的目的是方便用户一次执行多个令。执行 Redis 事务可分为三个阶段:

  • 开始事务

  • 令入队

  • 执行事务

Redis事务特性

Redis 事务具有两个重要特性:

1) 单独的隔离操作

事务中的所有令都会被序列化,它们将按照顺序执行,并且在执行过的程中,不会被其他客户端发送来的令打断。

2) 不保证原子性

在 Redis 的事务中,如果存在令执行失败的情况,那么其他令依然会被执行,不支持事务回滚机制。

注意:Redis 不支持事务回滚,原因在于 Redis 是一款基于内存的存储系统,其内部结构比较简单,若支持回滚机制,则让其变得冗余,并且损耗性能,这与 Redis 简单、快速的理念不相符。

Redis事务令

Redis事务令

说明

MULTI

开启一个事务

EXEC

执行事务中的所有令

WATCH key [key ...]

在开启事务之前用来监视一个或多个key 。如果事务执行时这些 key 被改动过,那么事务将被打断。

DISCARD

取消事务。

UNWATCH

取消 WATCH 令对 key 的监控。

Redis事务应用

您可以把事务可以理解为一个批量执行 Redis 令的脚本,但这个操作并非原子性操作,也就是说,如果中间某条令执行失败,并不会导致前面已执行令的回滚,同时不会中断后续令的执行(不包含 key 的情况)。示例如下:

开启事务

127.0.0.1:6379> MULTI

OK

127.0.0.1:6379> INCR 1

QUEUED #令入队成功

127.0.0.1:6379> SET num 10

QUEUED

#批量执行令

127.0.0.1:6379> EXEC

1) (integer) 1

2) OK

若您在事务开启之前了某个 key,那么您不应该在事务中尝试修改它,否则会导致事务中断。

开启事务之前设置key/value,并

127.0.0.1:6379> set www.biancheng网站站点" rel="nofollow" />