memcache CAS实现原子操作
背景: 多个分布式系统实现计数器累加。
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;
}
【memcache CAS实现原子操作】public Boolean checkExecuteOver(String memcachedKey) throws Exception {
MemcachedItem memcachedItem = memcachedService.gets(memcachedKey);
Boolean exist;
long casUnique = memcachedItem.getCasUnique();
int value = https://www.it610.com/article/(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;
}
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM