建设房屋出租网站,dede 中英文网站,做网站需要多少空间,360建筑网现在叫什么【README】
redis的java客户端对键加锁和解锁#xff08;Jedis.watch() Jedis.unwatch() #xff09;#xff1b; 【1】代码
/*** redis加锁-watch * 【场景描述】#xff1a; watch命令就是标记一个键#xff0c;如果标记了一个键#xff0c;* 在提交事务前如果该键…【README】
redis的java客户端对键加锁和解锁Jedis.watch() Jedis.unwatch() 【1】代码
/*** redis加锁-watch * 【场景描述】 watch命令就是标记一个键如果标记了一个键* 在提交事务前如果该键被别人修改过那事务提交就会失败这种情况可以再重新尝试一次* 首先标记了键 balance然后检查余额是否足够不足就取消标记并不做扣减* 足够的话启动事务进行更新* 如果在此期间balance被其他人修改那么在提交事务执行exce时就会报错* 程序可以捕获此类错误并重新执行一次直到成功 */public static void main(String[] args) {boolean shopResult new RedisTxTest().doShopping();System.out.println(购物结果 shopResult); }/*** 购物刷信用卡 * return*/public boolean doShopping() {Jedis redis new Jedis(192.168.163.201, 6382);int balance; // 余额-初始为100 int debt; // 欠额 int realConsumeAmount 10; // 实际消费额 boolean result false; redis.watch(balance); // 对键 balance 监听加锁 balance Integer.valueOf(redis.get(balance)); if (realConsumeAmount balance ) { // 若实际消费金额 大于 信用卡内余额即不够刷放弃本次事务的提交返回 false redis.unwatch(); System.out.printf(消费失败原因【信用卡额度不够】信用卡额度【%d】消费额【%d】\n, balance, realConsumeAmount); } else { // 若实际消费金额小于 信用卡内余额即够刷 可以扣款System.out.println(****** shopping tx ******);Transaction tx redis.multi(); // 开启事务 tx.decrBy(balance, realConsumeAmount); // 减去余额tx.incrBy(debt, realConsumeAmount); // 增加欠额tx.exec(); // 提交事务 /** 提交事务后获取余额 和 欠额 */balance Integer.valueOf(redis.get(balance));debt Integer.valueOf(redis.get(debt));System.out.printf(消费扣款【%d】元成功后, 信用卡余额【%d】,欠额【%d】, realConsumeAmount, balance, debt); result true; }// 记得关闭redis连接 redis.close();return result; }