背景: 多个分布式系统实现计数器累加。
protected Boolean execute() throws Exception {
String memcachedKey = "testCAS";
Boolean exist = true;
try {
exist = memcachedService.add(memcachedKey, 1 ,60000);
if (exist) {
exist = false;
} else {
exist = checkExecuteOver(memcachedKey);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return exist;
}
public Boolean checkExecuteOver(String memcachedKey) throws Exception { MemcachedItem memcachedItem = memcachedService.gets(memcachedKey); Boolean exist; long casUnique = memcachedItem.getCasUnique(); int value = (int) memcachedItem.getValue(); if (value >= (distributed.getAllNumberList().size() - 1)) { exist = true; } else { boolean unanimous = memcachedService.cas(memcachedKey, value + 1 ,casUnique); if (unanimous) { exist = false; } else { // 版本号不一致 重新计算 exist = checkExecuteOver(memcachedKey); } } return exist; }