redis事务

事务

Redis 事务提供了一种将多个命令打包,然后一次性、顺序性地执行的机制。这在一定程度上提供了操作的原子性。尽管 Redis 事务不能回滚(如果事务中的某个命令失败,事务中的其他命令仍然会被执行),但它们确保了一系列命令会被连续执行,不会插入其他客户端的命令。

使用 Redis 事务的步骤

Redis 事务的使用通常遵循以下步骤:

  1. 开始事务:使用 MULTI 命令开始一个事务。
  2. 命令入队:在执行 MULTI 后,所有后续的命令都不会立即执行,而是被放入队列中。在这个阶段,如果有命令语法错误,Redis 会返回错误,但命令仍会被添加到队列中。
  3. 执行事务:使用 EXEC 命令执行事务。当收到 EXEC 命令时,Redis 会顺序执行队列中的所有命令。如果在执行 MULTI 之后、EXEC 执行之前客户端连接断开,那么整个事务队列中的命令都不会被执行。
  4. 放弃事务:如果在任何时候你想放弃事务,可以使用 DISCARD 命令。这会清空事务队列,并将连接状态回滚到正常。

事务的特性

  • 原子性:Redis 事务的原子性保证了事务内的命令序列要么全部执行,要么一个也不执行。然而,这种原子性不包括命令执行的结果——即使某些命令执行失败,其他命令仍会继续执行。
  • 隔离性:事务中的所有命令在 EXEC 命令发出之前都不会被执行,这意味着它们是隔离的,并且作为一个整体执行。
  • 持久性:一旦事务中的所有命令被执行,它们的效果(除了因错误而未执行的命令)就是持久的。
  • 非回滚性:如果事务中的命令执行过程中出现错误,Redis 不会回滚之前已经执行的命令。需要注意的是,这里的错误指的是命令执行的运行时错误,而不是语法错误。

示例

下面是一个 Redis 事务的简单示例:

> MULTI
OK
> INCR mycounter
QUEUED
> INCR mycounter
QUEUED
> EXEC
1) (integer) 1
2) (integer) 2

这个事务简单地将 mycounter 的值增加了两次。使用 MULTI 开始事务,然后将两个 INCR mycounter 命令放入队列。最后,使用 EXEC 执行所有命令。

全体连坐

发生编译错误后全部不会执行

冤有头债有主

发生运行时错误,其他都会执行

watch

image-20240212100846909

使用watch监控之后,发生修改不管在multi中有多少条语句都返回nil

image-20240212101418669

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值