實戰Memcached快取系統(5)Memcached的CAS程式例項
尊重知識,轉載請註明本文來自:程式設計藝術家Poechant的CSDN部落格 http://blog.csdn.net/poechant
1. 非CAS
首先看一個不是CAS的Memcached程式例項。例項的問題原型,見上一篇博文。
程式例項:
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);
}
}
執行結果:
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
程式例項:
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());
}
}
執行結果:
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
相關文章
- 實戰Memcached快取系統(6)Memcached CAS的多執行緒程式例項快取執行緒
- 實戰Memcached快取系統(4)Memcached的CAS協議快取協議
- 實戰Memcached快取系統(1)Memcached基礎及示例程式快取
- 實戰Memcached快取系統(3)Memcached配置引數初解快取
- 實戰Memcached快取系統(7)Memcached的一些基礎FAQ快取
- 實戰Memcached快取系統(2)Memcached Java API基礎之MemcachedClient快取JavaAPIclient
- 實戰Memcached快取系統(8)Memcached非同步實時讀寫問題的解決方案SAC快取非同步
- 分散式快取系統之Memcached分散式快取
- 快取: Memcached和terracotta快取
- Memcached::cas 詳解
- Memcached 分散式快取實現原理分散式快取
- 記憶體快取系統memcached與redis實現的對比記憶體快取Redis
- 伺服器後端開發系列——《實戰Memcached記憶體快取系統》伺服器後端記憶體快取
- memcached資料庫快取資料庫快取
- Memcached安裝與使用例項
- C#呼叫Couchbase中的Memcached快取C#快取
- memcached快取知識簡單梳理快取
- 如何利用memcached和wcf實現一個快取服務快取
- 分散式快取伺服器Memcached介紹分散式快取伺服器
- 系統快取全解析7:第三方分散式快取解決方案 Memcached和Cacheman快取分散式
- 通過Cache::Memcached方式 例項物件應用物件
- Shopify使用Memcached而不是Redis快取提升20%效能Redis快取
- Linux系統中部署memcachedLinux
- 對比Memcached和Redis,誰才是適合你的快取?Redis快取
- Rust編寫的Memcached快取替代品:memc.rsRust快取
- 輕量級 memcached快取代理 twemproxy實踐快取
- LNMP 分散式叢集(四):Memcached 快取伺服器的搭建LNMP分散式快取伺服器
- gmcache一個用go寫的分散式快取,類似memcachedGo分散式快取
- Memcached
- 初試redis,比memcached快10倍速Redis
- Memcached筆記——(三)Memcached使用總結筆記
- jQuery清除快取例項程式碼jQuery快取
- Memcached實戰之複製----基於repcached的主從【轉】PCA
- 使用Memcached實現Session共享Session
- memcached 分散式實現原理分散式
- Memcached 與 Redis 實現的對比Redis
- memcached與redis實現的對比Redis
- Memcached 協議協議