- 论坛徽章:
- 0
|
Memcached使用入门——(5)Memcached的CAS程序实例 .
1. 非CAS
首先看一个不是CAS的Memcached程序实例。实例的问题原型,见上一篇博文。
程序实例:
view plaincopy to clipboardprint?- 01.package com.sinosuperman.memcached;
- 02.
- 03.import java.io.IOException;
- 04.import java.net.InetSocketAddress;
- 05.
- 06.import net.spy.memcached.MemcachedClient;
- 07.
- 08.public class Test {
- 09. public static void main(String[] args) throws IOException {
- 10. MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
- 11.
- 12. cache.set("x", 1800, "Love");
- 13.
- 14. String obj1 = (String) cache.get("x");
- 15. String obj2 = (String) cache.get("x");
- 16. obj2 = "Michael";
- 17.
- 18. cache.set("x", 1800, obj2);
- 19. System.out.println("Non-CAS 2:\t" + obj2);
- 20. System.out.println("Non-CAS 1:\t" + obj1);
- 21. }
- 22.}
- 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);
- }
- }
复制代码 运行结果:
view plaincopy to clipboardprint?- 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
- 02.2011-12-18 23:12:39.843 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@b09e89
- 03.Non-CAS 2: Michael
- 04.Non-CAS 1: Love
- 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
程序实例:
view plaincopy to clipboardprint?- 01.package com.sinosuperman.memcached;
- 02.
- 03.import java.io.IOException;
- 04.import java.net.InetSocketAddress;
- 05.
- 06.import net.spy.memcached.CASValue;
- 07.import net.spy.memcached.MemcachedClient;
- 08.
- 09.public class Test {
- 10. @SuppressWarnings("unchecked")
- 11. public static void main(String[] args) throws IOException {
- 12. MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
- 13.
- 14. cache.set("y", 1800, "Love");
- 15.
- 16. CASValue casValue1 = cache.gets("y");
- 17. CASValue casValue2 = cache.gets("y");
- 18. cache.cas("y", casValue2.getCas(), casValue2.getValue());
- 19.
- 20. System.out.println("CAS 2:\t" + casValue2.getCas());
- 21. System.out.println("Value 2:\t" + casValue2.getValue());
- 22.
- 23. System.out.println("CAS 1:\t" + casValue1.getCas());
- 24. System.out.println("Value 1:\t" + casValue1.getValue());
- 25. }
- 26.}
- 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, "Love");
- CASValue casValue1 = cache.gets("y");
- CASValue casValue2 = cache.gets("y");
- cache.cas("y", casValue2.getCas(), casValue2.getValue());
-
- 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());
- }
- }
复制代码 运行结果:
view plaincopy to clipboardprint?- 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
- 02.2011-12-18 23:07:14.541 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@1621e42
- 03.CAS 2: 11
- 04.Value 2: Love
- 05.CAS 1: 11
- 06.Value 1: Love
复制代码 |
|