//true执行
public Boolean execution(String key, String orderId) {
/** 实现缓存锁,确保多实例情况下,只有一个实例可以执行退款 **/
// 为本实例生成一个 锁ID
String randomVariable= DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS") + RandomStringUtils.randomNumeric(7);
// 将本实例的锁ID存到redis集合中,并设置10秒过期
this.lSet(key + orderId,randomVariable,30L);
// 获得redis集合对象
List<Object> objects = this.lGet(key + orderId, 0, 0);
// 获得第一个锁ID
String firstStr = (String)objects.get(0);
// 如果不是第一个,则不进行后续退款
if (randomVariable.equals(firstStr)){
log.info("副本执行");
return true;
}
log.info("其他副本已执行无重复执行");
return false;
}
07-27
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交