redis事务 学习笔记

0 环境

  • 系统环境: centos7
  • 编辑器: xshell
  • IED:IDEA

1 事务概念

思维导图
new CallRedisDemo().execute 往期代码有 不在追叙

2 实现

1 在redis服务器中测试

在这里插入图片描述
在这里插入图片描述

2 代码实现

public class TransactionTest {
    public static void main(String[] args) {
        // 往期代码有 不在追叙
        new CallRedisDemo().execute(jedis -> {
            jedis.set("money", "1000");
            Integer money = new TransactionTest().addMoney(jedis, "money", 2000);
            System.out.println(money);
        });
    }

    /**
     * 事务的使用
     * @param jedis
     * @param key
     * @param money
     * @return
     */
    private Integer addMoney(Jedis jedis, String key, Integer money) {
        while (true){
            // 监视键
            jedis.watch(key);

            // 将字符串转化为数字 相加
            int newMoney = Integer.parseInt(jedis.get(key)) + money;

            // 开启事务
            Transaction multi = jedis.multi();
            multi.set(key, String.valueOf(newMoney));
            // 执行事务
            List<Object> exec = multi.exec();
            // 若是存在 跳出 否则循环执行
            if (null != exec) {
                break;
            }

        }

        // 转化为整型
        return Integer.parseInt(jedis.get(key));
    }
}
  • 正常操作
    在这里插入图片描述
  • 异常操作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
posted @ 2020-04-24 18:37  焜掱玚  阅读(88)  评论(0编辑  收藏  举报
levels of contents