Redis事务

1.Redis事务简介

Redis事务可以通过MULTI、EXEC、WATCH和DISCARD指令来实现。

1. MULTI指令:表示事务的开始,之后的所有指令都会被逐一记录,但不会立即执行。

2. EXEC指令:表示事务的执行,会按照记录的指令逐一执行。

3. WATCH指令:可以监视一个或多个键的变化,如果在事务执行期间被其他客户端修改,事务会被回滚。

4. DISCARD指令:表示事务的撤销,可以放弃之前记录的指令

2.RedisTemplate 实现 redis 事务

String key1 = "mykey1";String key2 = "mykey2";
String value1 = "hello";
String value2 = "world";

redisTemplate.execute(new SessionCallback<Object>() {
    @Override
    public Object execute(RedisOperations redisOperations) throws DataAccessException {
        redisOperations.multi(); // 开始事务
        redisOperations.opsForValue().set(key1, value1);
        redisOperations.opsForValue().set(key2, value2); // 数据会被覆盖
        redisOperations.exec(); // 提交事务
        return null;
    }
});

在这个例子中,我们先定义了一个 key 和两个不同的 value。然后通过 execute 方法执行一个 SessionCallback 回调方法,其中包含了 Redis 事务的所有步骤。在回调方法中,我们先调用了 multi 方法,开始事务,然后执行了两个 set 命令。最后,我们通过 exec 方法提交事务,这个过程中如果出现了错误,所有命令都会被回滚,数据不会被修改。

需要注意的是,在使用 Redis 事务时,需要确保多条命令都是原子的,在执行过程中不会被其他任务中断或修改,否则可能会导致事务失败。此外,Redis 的事务并不是分布式事务,仅仅是对同一个 Redis 一个实例中的多条命令进行操作的一种方式。

3.Redis 的事务并不是分布式事务

是的,Redis 的事务并不是分布式事务。虽然 Redis 支持多命令事务,但是在 Redis 集群中,每个节点只能进行本地事务,没有全局视图,因此无法支持分布式事务。如果需要进行分布式事务,需要使用支持分布式事务的数据库,例如 MySQL Cluster、TiDB 等或者使用lua脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值