redistemplate事务实践

code:

    public Object testRedisMulti() {

        Object o = stringRedisTemplate.execute(new SessionCallback() {
            @Override
            public Object execute(RedisOperations operations) throws DataAccessException {
             //   operations.watch("testRedisMulti");
                operations.multi();
                operations.opsForValue().set("testRedisMulti", "0");
                String now = (String) operations.opsForValue().get("testRedisMulti");
                System.out.println(now);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                now = (String) operations.opsForValue().get("testRedisMulti");
                System.out.println(now);
                Object rs = operations.exec();
                return rs;
            }
        });

        System.out.println(o);

        return o;
    }



初始值:

127.0.0.1:6389> get testRedisMulti

"initial"


代码执行:


                operations.multi();
                operations.opsForValue().set("testRedisMulti", "0");
                String now = (String) operations.opsForValue().get("testRedisMulti");
                System.out.println(now);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

客户端:

127.0.0.1:6389> get testRedisMulti

"initial",意味着multi中的命令还未发送


System.out输出:

null

注意在multi中的get是娶不到值的

过5秒。。。


代码执行:

now = (String) operations.opsForValue().get("testRedisMulti");
                System.out.println(now);
                Object rs = operations.exec();
                return rs;

System.out输出:

null


客户端:

127.0.0.1:6389> get testRedisMulti

"0",multi命令提交后修改了值


最终输出

[0, 0]


可以看到两次get的值返回给了execute函数,而且是修改后的值,符合原理




隐患?!

Sping Data Redis 使用事务时,不关闭连接的问题


 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值