redis事务加锁之java操作

本文介绍了如何在Java中使用Jedis库进行Redis事务处理和加锁操作,是每日一看的技术分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日一看

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);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值