(转)实战Memcached缓存系统(6)Memcached CAS的多线程程序实例
1. 源程序
- package com.sinosuperman.memcached;
- import java.io.IOException;
- import java.net.InetSocketAddress;
- import net.spy.memcached.CASResponse;
- import net.spy.memcached.CASValue;
- import net.spy.memcached.MemcachedClient;
- public class Test {
- private static MemcachedClient client = null;
- static {
- try {
- client = new MemcachedClient(new InetSocketAddress("localhost", 11211));
- } catch (IOException o) {
- }
- }
- public static void main(String[] args) throws Exception {
- client.set("numberss", 1800, 1);
- Test testObj = new Test();
- for (int i = 0; i < 10; i++) {
- testObj.new ThreadTest("Thread-" + (i + 1)).start();
- }
- }
- private class ThreadTest extends Thread {
- private MemcachedClient client = null;
- ThreadTest(String name) throws IOException {
- super(name);
- client = new MemcachedClient(new InetSocketAddress("localhost", 11211));
- }
- public void run() {
- int i = 0;
- int success = 0;
- while (i < 10) {
- i++;
- CASValue<Object> uniqueValue =client.gets("numberss");
- CASResponse response = client.cas("numberss",
- uniqueValue.getCas(), (Integer)uniqueValue.getValue() + 1);
- if (response.toString().equals("OK")) {
- success++;
- }
- if (i == 10)
- System.out.println(Thread.currentThread().getName() + " " + i
- + " time " + " update oldValue : " + uniqueValue.getValue()
- + " , result : " + response);
- }
- if (success < 10) {
- Count.incr(10 - success);
- System.out.println("Test counter: " + Count.get());
- }
- }
- }
- public static class Count {
- private static int counter = 0;
- public static void incr(int x) {
- counter += x;
- }
- public static int get() {
- return counter;
- }
- }
- }
2. 输出结果:
- Thread-1 10 time update oldValue : 14 , result : EXISTS
- Test counter: 6
- Thread-2 10 time update oldValue : 14 , result : EXISTS
- Test counter: 15
- Thread-3 10 time update oldValue : 17 , result : EXISTS
- Test counter: 22
- Thread-5 10 time update oldValue : 17 , result : EXISTS
- Test counter: 27
- Thread-4 10 time update oldValue : 20 , result : OK
- Test counter: 33
- Thread-8 10 time update oldValue : 27 , result : OK
- Test counter: 36
- Thread-6 10 time update oldValue : 28 , result : EXISTS
- Test counter: 43
- Thread-10 10 time update oldValue : 31 , result : EXISTS
- Test counter: 52
- Thread-9 10 time update oldValue : 31 , result : OK
- Test counter: 60
- Thread-7 10 time update oldValue : 35 , result : OK
- Test counter: 65
3. 分析
我们可以看到,未成功的次数最终为65,数据值最终为35,两者的和刚好是100,正好符合我们的实验结果预期。
(转)实战Memcached缓存系统(6)Memcached CAS的多线程程序实例的更多相关文章
- (转)实战Memcached缓存系统(1)Memcached基础及示例程序
1.Cache定义 (1)狭义概念:用于CPU的相对高速处理与主存(Main Memory)的相对低速处理的之间起到协调功能的硬件设备. (2)广义概念:用于速度相差较大的两种硬件之间,起到协调两者数 ...
- 6.memcached缓存系统
1.memcached的安装和参数 memcached缓存系统一般还是部署在linux服务器上,所以这里只介绍linux上memcache的安装 首先切换到root用户,然后apt-get insta ...
- Linux下搭建Memcached缓存系统
首先说下抱歉,博主近期单位经常加班.博客更新有点慢.希望大家理解,草稿箱里存了不少内容,等不忙时候一点点填坑~ 在一般的站点开发学习时候.都会把数据存放在RDBMS(关系型数据库系统(Relation ...
- Memcached 缓存系统简介
memcached官网:http://memcached.org/ What is Memcached? Memcached是一个自由开源的,高性能,高并发,分布式内存对象缓存系统. Memcache ...
- (转)实战Memcached缓存系统(5)Memcached的CAS程序实例
1. 非CAS 首先看一个不是CAS的Memcached程序实例.实例的问题原型,见上一篇博文. 程序实例: package com.sinosuperman.memcached; import ja ...
- (转)实战Memcached缓存系统(7)Memcached的一些基础FAQ
1. Memcached是什么? Memcached是分布式的内存对象缓存系统. 2. Memcached的基本数据结构是什么? Memcached是基于Key/Value对的HashMap.每一对, ...
- (转)实战Memcached缓存系统(3)Memcached配置参数初解
一.基本参数 在我们第一次安装Memcached时,一般都是用过这个命令: memcached -m 512 -u root -d -l 127.0.0.1 -p 11211 我们先来解释这几个参数的 ...
- django之memcached缓存系统
django其他缓存方法:(https://www.cnblogs.com/jishuweiwang/p/6110809.html) memcached版本 <1.5 1. memcached缓 ...
- (转)实战Memcached缓存系统(4)Memcached的CAS协议
1. 什么是CAS协议 很多中文的资料都不会告诉大家CAS的全称是什么,不过一定不要把CAS当作中国科学院(China Academy of Sciences)的缩写.Google.com一下,CAS ...
随机推荐
- webpack echarts配置实例
简单介绍 本例介绍怎样在webpack中构建依赖echats的项目,echarts有好几种方式引入项目: 标签单文件引入:自1.3.5開始,ECharts提供标签式引入.假设项目本身并非基于模块化开发 ...
- 关于STM32的ST官方的库的一点看法
标题确实很别扭,因为我现在用这个库也很别扭. 在不久之前,一直有个讨论的话题:STM32开发是用库还是用寄存器? 很多人的结论是不需要讨论! 但是,今天我想说下我的看法. 首先,我还是一个菜鸟,对库对 ...
- Android APK方式换肤实现原理
现在很多APP都有换肤的功能,例如微博,QQ等应用.这些应用的换肤原理是什么? 在用微博的时候,不难发现,当你要换肤时,先下载并安装一个皮肤apk,然后选择这个皮肤,就可以了. 这种方式就是把皮肤打包 ...
- 小白日记29:kali渗透测试之Web渗透-扫描工具-Vega
WEB扫描工具-Vega 纯图形化界面,Java编写的开源web扫描器.两种工作模式:扫描模式和代理模式[主流扫描功能].用于爬站.处理表单,注入测试等.支持SSL:http://vega/ca.cr ...
- Windows Service 之 详解(一)
一.Windows 服务简介 Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序. 1.适合创建Windows 服务的场景: [1] 在没有用户交互操作的情况下运行程序: ...
- jquery 设置style:display 其实很方便的
("#id").css('display','none'); $("#id").css('display','block'); 或 $("#id&qu ...
- DNA比对
[编程题](满分27分) 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为 ...
- Java 8 Stream API Example Tutorial
Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...
- set_ip_pool
#! /usr/bin/env python# -*- coding: utf-8 -*- import redisimport urllib2class RedisConnect: #clas ...
- poj 3250 栈应用
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #d ...