您的位置:首页 > 数据库 > Memcache

实战Memcached缓存系统(5)Memcached的CAS程序实例

2016-10-14 14:08 615 查看
尊重知识,转载请注明本文来自:编程艺术家Poechant的CSDN博客 http://blog.csdn.net/poechant
1. 非CAS

首先看一个不是CAS的Memcached程序实例。实例的问题原型,见上一篇博文。

程序实例:

[java] view
plain copy

 print?

package com.sinosuperman.memcached;  

  

import java.io.IOException;  

import java.net.InetSocketAddress;  

  

import net.spy.memcached.MemcachedClient;  

  

public class Test {  

    public static void main(String[] args) throws IOException {  

        MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  

          

        cache.set("x", 1800, "Love");  

  

        String obj1 = (String) cache.get("x");  

        String obj2 = (String) cache.get("x");  

        obj2 = "Michael";  

          

        cache.set("x", 1800, obj2);  

        System.out.println("Non-CAS 2:\t" + obj2);  

        System.out.println("Non-CAS 1:\t" + obj1);  

    }  

}  

运行结果:

[plain] view
plain copy

 print?

2011-12-18 23:12:39.836 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue  

2011-12-18 23:12:39.843 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@b09e89  

Non-CAS 2:  Michael  

Non-CAS 1:  Love  

可见在多个Client操作时,一定会引起写不一致性的问题。

2. CAS

程序实例:

[java] view
plain copy

 print?

package com.sinosuperman.memcached;  

  

import java.io.IOException;  

import java.net.InetSocketAddress;  

  

import net.spy.memcached.CASValue;  

import net.spy.memcached.MemcachedClient;  

  

public class Test {  

    @SuppressWarnings("unchecked")  

    public static void main(String[] args) throws IOException {  

        MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  

          

        cache.set("y", 1800, "Michael");  

  

        CASValue casValue1 = cache.gets("y");  

        CASValue casValue2 = cache.gets("y");  

        cache.cas("y", casValue2.getCas(), "Love");  

          

        System.out.println("CAS 2:\t" + casValue2.getCas());  

        System.out.println("Value 2:\t" + casValue2.getValue());  

          

        System.out.println("CAS 1:\t" + casValue1.getCas());  

        System.out.println("Value 1:\t" + casValue1.getValue());  

    }  

}  

运行结果:

[plain] view
plain copy

 print?

2011-12-18 23:07:14.528 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue  

2011-12-18 23:07:14.541 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@1621e42  

CAS 2:  11  

Value 2:    Love  

CAS 1:  11  

Value 1:    Love  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: