Jedis中watch监控对象在exec之前修改值后事务并未中断
程序猿老高 博客专家认证 2020-08-29 05:05:37 import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class Test {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.18.130", 6379);
int balance;// 余额
int debt;// 欠额
int expense = 100;// 实刷额度
jedis.watch("balance");
balance = Integer.parseInt(jedis.get("balance"));
if (balance < expense) {
System.out.println("信用卡余额不足!");
jedis.unwatch();
jedis.close();
return;
}
System.out.println("*****begin*****");
Transaction transaction = jedis.multi();
try {
transaction.decrBy("balance", expense);
transaction.incrBy("debt", expense);
try {
Thread.sleep(10000);// 此时balance的值被修改,但本次事务没有中断。
} catch (Exception e) {
e.printStackTrace();
}
transaction.exec();
balance = Integer.parseInt(jedis.get("balance"));
debt = Integer.parseInt(jedis.get("debt"));
System.out.println("balance=" + balance);
System.out.println("debt=" + debt);
System.out.println("*****end*****");
} catch (Exception e) {
e.printStackTrace();
transaction.discard();
}finally {
jedis.unwatch();
jedis.close();
}
}
}