redis事务加锁之java操作

redis事务加锁之java操作

package com.czmec.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**  * Created by Administrator on 2016/12/6 0006.  */ public class affairLock {
    /**  * 加锁  */  public boolean transMethod(){
        Jedis jedis=new Jedis("112.74.34.11",6379);
        int balance;//可用余额
        int debt;//欠款
        int amtTosutract =10;//实刷额度
        jedis.watch("balance");
        balance=Integer.parseInt(jedis.get("balance"));
        if(balance<amtTosutract){
            jedis.unwatch();
            System.out.println("modify");
            return false;
        }else{
            System.out.println("***********transaction");
            Transaction transaction=jedis.multi();
            transaction.decrBy("balance",amtTosutract);
            transaction.incrBy("debt",amtTosutract);
            transaction.exec();
            balance=Integer.parseInt(jedis.get("balance"));
            debt=Integer.parseInt(jedis.get("debt"));
            System.out.println(balance);
            System.out.println(debt);
            return  true;
        }
    }

    /**  * 通俗易懂的讲 watch命令就是标记一个键,如果标记了一个键,在事务提交前如果该建被别人修改过,那么事务就会失败  * 这种情况通常可以在程序中 重新在尝试一次。  * 首先标记了键balance 然后检查 余额是不是足够,不足就取消标记 并不做减扣,足够的话,就启动事务进行更新操作  * 如果在此期间 balance被其他人修改,那再提交事务(执行exec)时就会报错,程序中通常可以捕获这类错误再重新执行一次,知道成功  * @param args  */  public static void main(String [] args){
        affairLock testTransaction=new affairLock();
        boolean retValue=testTransaction.transMethod();
        System.out.println("main retValue---"+retValue);
    }
}

    原文作者:java锁
    原文地址: https://blog.csdn.net/qq_33913037/article/details/53490045
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞