Jedis jedis = jedisPool.getResource();
jedis.select(1);
try {
// watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败
while ("OK".equals(jedis.watch(key).toUpperCase())) {
// 从redis中获得值
String balance = jedis.get(key);
// 业务处理
balance = balance + "1";
try{
Transaction tx = jedis.multi();
tx.set(key, balance + "");
List<Object> result = tx.exec();
if (result == null || result.isEmpty()) {
// 在此之间,其他线程修改了balance的值,
// 当然了exec,discard,unwatch命令都会清除连接中的所有监视
jedis.unwatch();
} else {
logger.info("ok-success");
break;
}
}
catch(Exception e){
e.printStackTrace();
}
}
} finally {
jedis.close();
}
用redis处理并发问题的代码
最新推荐文章于 2025-06-23 23:46:52 发布