package spymemcached; import java.io.IOException; import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import net.spy.memcached.CASValue; import net.spy.memcached.MemcachedClient; import net.spy.memcached.internal.OperationFuture; /** * * @author fairjm * fair-jm.iteye.com * */ public class MemcachedCASSpec { public static final int CONCURRENT_THREAD_NUM = 100; public static void main(String[] args) throws IOException, InterruptedException { final MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.1.2.194", 11211)); ExecutorService executor = Executors.newFixedThreadPool(CONCURRENT_THREAD_NUM); final CountDownLatch countDown = new CountDownLatch(CONCURRENT_THREAD_NUM); final AtomicInteger oks = new AtomicInteger(0); final AtomicInteger okThenModifieds = new AtomicInteger(0); for (int i = 0; i < CONCURRENT_THREAD_NUM; i++) { executor.execute(new Runnable() { @Override public void run() { Random ran = new Random(Thread.currentThread().getId() + System.currentTimeMillis()); int num = ran.nextInt(10000); boolean isOk = false; while (!isOk) { OperationFuture<Boolean> future; CASValue<Object> oldValue = mc.gets("testKey"); // 不存在的情况 此时进行CAS操作 无论指定什么key 正常返回都会是NOT_FOUND需要手工插入 // 这里存在问题 需要用锁 实际使用进行CAS前最好保证key已经存在 if (oldValue == null) { future = mc.set("testKey", 0, num); try { future.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } isOk = true; } else { switch (mc.cas("testKey", oldValue.getCas(), num)) { case OK: oks.incrementAndGet(); System.out.println("OK"); isOk = true; break; // key不存在的情况 需要进行add(set也可以)操作 case NOT_FOUND: System.out.println("NOT_FOUND"); break; // 冲突 现有的CASID低于memcached中的 case EXISTS: System.out.println("Exists retry"); break; // 参数有问题 case OBSERVE_ERROR_IN_ARGS: System.out.println("error in args"); break; // 操作超时 case OBSERVE_TIMEOUT: System.out.println("timeout"); break; // 操作成功 但是在观察期间又被修改了(更新成功后马上被修改) case OBSERVE_MODIFIED: System.out.println("succeed but modified then"); isOk = true; okThenModifieds.incrementAndGet(); break; } } } countDown.countDown(); } }); } countDown.await(); System.out.println("testKey:" + mc.get("testKey")); System.out.println("count:" + (oks.get() + okThenModifieds.get())); if (mc != null) { mc.shutdown(); } executor.shutdown(); } }
对memcached有版本要求 低版本不支持CAS
感觉怪怪的 key不存在的时候拿不到CAS ID也不能用CAS了....只有自己add(或set) 需要用锁....
相关推荐
H3C_CAS虚拟机支持的操作系统列表v3.5H3C_CAS虚拟机支持的操作系统列表v3.5
目录: 01 H3C CAS 云迁移方案最佳实践 02 H3C CAS-云容器引擎配置指导 03 H3C CAS 虚拟机快照配置...19 H3C CAS 调整虚拟机配置操作指导 20 H3C CAS-RBD配置指导 21 H3C CAS-网卡直通配置指导 22 H3C CAS-SR-IO
H3C_CAS支持硬件SR-IOV操作指导书 H3C_CAS与趋势产品联调操作配置指导书 H3C_CAS虚拟机内存隔离操作指导书 H3C_CAS虚拟机搭建双机热备环境方案及报告 ) H3C_CAS_3.0虚拟机防病毒操作指导书 H3C_CAS端口镜像特性...
VMware虚拟机与CAS虚拟机互转操作步骤
CAS单点登录操作文档 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: • 开源的企业级单点登录解决...
cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x...
H3C CAS 3.0版 H3C CAS 3.0产品培训胶片 H3C CAS-云计算管理平台技术白皮书V2.0 H3C CAS-云计算管理平台 安装指导-5W101-整本手册 H3C CAS-维护手册V2.0 H3C CAS-工程开局指导手册V2.0 H3C CAS-Rest API H3C ...
CAS协议,包括cas1.0和cas2.0的协议,cas 协议分为两部分,一部分是票据-ticket,一部分是url。
H3C_CAS支持OVF虚拟机格式操作指导书 H3C_CAS资源性能监控操作指导书 H3C_CAS虚拟机磁盘限速功能操作指导书 H3C_CAS虚拟机快照操作指导书 H3C_CAS虚拟机列表导出功能操作指导书
cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信
包含cas源码、cas使用说明文档(包含配置信息)、连接数据库所需jar包、cas服务端自定义返回值等
H3C CAS系统维护 H3C CAS日志维护 H3C CAS案例集 H3C CAS主机异常问题定位介绍 H3C CAS系统变更要求 H3C CAS版本升级方案介绍 H3C CAS系统命令
H3C CAS应用HA操作指南.pdf
1.CAS-集成mysql 2.CAS-日志审计 3.CAS-连接池配置 4.CAS-自定义错误信息 5.CAS-识别json文件 6.CAS-页面缓存记住我 7.CAS-cookie设置 8.CAS-tgc设置 9.CAS-登出 10.CAS-redisCluster集群存储ticket(相应redis必须...
n cas-server-3.4.2\modules\cas-server-support-jdbc-3.4.2.jar 、 cas-server-integration-restlet-3.4.2.jar 拷贝到 D:\server\apache-tomcat-6.0.18\webapps\cas\WEB-INF\lib 目录下。 n 数据库驱动 jar 拷贝...
本人亲自试验的cas单点登录配置,服务端用cas-server-3.5.2,客户端用cas-client-3.2.1,里边详细描述了具体每一步的配置过程及遇到的问题及异常,相信你也会碰到的,cas-client-3.2.1中需要修改一个java类的源代码...
cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。 请看博客...
H3C_CAS_LINUX安装cas-tools
CAS5.3.2Docker 部署方案CAS5.3.2Docker 部署方案CAS5.3.2Docker 部署方案
Java--CAS操作分析