免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1249 | 回复: 1
打印 上一主题 下一主题

Memcached使用入门——(5)Memcached的CAS程序实例 . [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-19 16:32 |只看该作者 |倒序浏览
Memcached使用入门——(5)Memcached的CAS程序实例 .











1. 非CAS

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

程序实例:

view plaincopy to clipboardprint?
  1. 01.package com.sinosuperman.memcached;  
  2. 02.  
  3. 03.import java.io.IOException;  
  4. 04.import java.net.InetSocketAddress;  
  5. 05.  
  6. 06.import net.spy.memcached.MemcachedClient;  
  7. 07.  
  8. 08.public class Test {  
  9. 09.    public static void main(String[] args) throws IOException {  
  10. 10.        MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
  11. 11.         
  12. 12.        cache.set("x", 1800, "Love");  
  13. 13.  
  14. 14.        String obj1 = (String) cache.get("x");  
  15. 15.        String obj2 = (String) cache.get("x");  
  16. 16.        obj2 = "Michael";  
  17. 17.         
  18. 18.        cache.set("x", 1800, obj2);  
  19. 19.        System.out.println("Non-CAS 2:\t" + obj2);  
  20. 20.        System.out.println("Non-CAS 1:\t" + obj1);  
  21. 21.    }  
  22. 22.}  
  23. package com.sinosuperman.memcached;

  24. import java.io.IOException;
  25. import java.net.InetSocketAddress;

  26. import net.spy.memcached.MemcachedClient;

  27. public class Test {
  28.         public static void main(String[] args) throws IOException {
  29.                 MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
  30.                
  31.                 cache.set("x", 1800, "Love");

  32.                 String obj1 = (String) cache.get("x");
  33.                 String obj2 = (String) cache.get("x");
  34.                 obj2 = "Michael";
  35.                
  36.                 cache.set("x", 1800, obj2);
  37.                 System.out.println("Non-CAS 2:\t" + obj2);
  38.                 System.out.println("Non-CAS 1:\t" + obj1);
  39.         }
  40. }
复制代码
运行结果:

view plaincopy to clipboardprint?
  1. 01.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  
  2. 02.2011-12-18 23:12:39.843 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@b09e89  
  3. 03.Non-CAS 2:  Michael  
  4. 04.Non-CAS 1:  Love  
  5. 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
  6. 2011-12-18 23:12:39.843 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@b09e89
  7. Non-CAS 2:        Michael
  8. Non-CAS 1:        Love
复制代码
可见在多个Client操作时,一定会引起写不一致性的问题。




2. CAS

程序实例:

view plaincopy to clipboardprint?
  1. 01.package com.sinosuperman.memcached;  
  2. 02.  
  3. 03.import java.io.IOException;  
  4. 04.import java.net.InetSocketAddress;  
  5. 05.  
  6. 06.import net.spy.memcached.CASValue;  
  7. 07.import net.spy.memcached.MemcachedClient;  
  8. 08.  
  9. 09.public class Test {  
  10. 10.    @SuppressWarnings("unchecked")  
  11. 11.    public static void main(String[] args) throws IOException {  
  12. 12.        MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
  13. 13.         
  14. 14.        cache.set("y", 1800, "Love");  
  15. 15.  
  16. 16.        CASValue casValue1 = cache.gets("y");  
  17. 17.        CASValue casValue2 = cache.gets("y");  
  18. 18.        cache.cas("y", casValue2.getCas(), casValue2.getValue());  
  19. 19.         
  20. 20.        System.out.println("CAS 2:\t" + casValue2.getCas());  
  21. 21.        System.out.println("Value 2:\t" + casValue2.getValue());  
  22. 22.         
  23. 23.        System.out.println("CAS 1:\t" + casValue1.getCas());  
  24. 24.        System.out.println("Value 1:\t" + casValue1.getValue());  
  25. 25.    }  
  26. 26.}  
  27. package com.sinosuperman.memcached;

  28. import java.io.IOException;
  29. import java.net.InetSocketAddress;

  30. import net.spy.memcached.CASValue;
  31. import net.spy.memcached.MemcachedClient;

  32. public class Test {
  33.         @SuppressWarnings("unchecked")
  34.         public static void main(String[] args) throws IOException {
  35.                 MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
  36.                
  37.                 cache.set("y", 1800, "Love");

  38.                 CASValue casValue1 = cache.gets("y");
  39.                 CASValue casValue2 = cache.gets("y");
  40.                 cache.cas("y", casValue2.getCas(), casValue2.getValue());
  41.                
  42.                 System.out.println("CAS 2:\t" + casValue2.getCas());
  43.                 System.out.println("Value 2:\t" + casValue2.getValue());
  44.                
  45.                 System.out.println("CAS 1:\t" + casValue1.getCas());
  46.                 System.out.println("Value 1:\t" + casValue1.getValue());
  47.         }
  48. }
复制代码
运行结果:

view plaincopy to clipboardprint?
  1. 01.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  
  2. 02.2011-12-18 23:07:14.541 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@1621e42  
  3. 03.CAS 2:  11  
  4. 04.Value 2:    Love  
  5. 05.CAS 1:  11  
  6. 06.Value 1:    Love  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-19 23:07 |只看该作者
学习鸟
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP