KillTask的代码
int num = Integer.parseInt(jedis.get("kill_num"));
if (num > 0) {
jedis.watch("kill_num", "kill_user");
Transaction transaction = jedis.multi();
transaction.decr("kill_num");
transaction.rpush("kill_user", "9527");
transaction.exec();
} else {
Application.pool.shutdown();
}
在库存为1的时候。如果两个线程同时去取jedis.get(“kill_num”),都拿到num=1.然后,都进入了redis事务的代码。最后就会出现库存为-1或-2的现象。我本地的测试也出现了这种情况。请老师提供解决方案。
jedis.watch之前取num的代码,老师没有做到事务的一致性。