一個例子
官方網站
http://www.whalin.com/memcached/
==============
假設我們有3臺memcached 服務器,server1 和server2 有3GB 的內存空間,server3 有2GB 的內存空間.下面程序說明怎么來創建客戶端.
import
com.danga.MemCached.*;
public
class MyClass {
// 創建一個 memcached 客戶端對象
protected
static
MemCachedClient mcc =
new
MemCachedClient();
// 創建 memcached連接池
static
{
// 指定memcached服務地址
String
[] servers =
{
"server1.mydomain.com:1121"
,
"server2.mydomain.com:1121"
,
"server3.mydomain.com:1121"
};
// 指定memcached服務器負載量
Integer
[] weights ={ 3, 3, 2 };
// 從連接池獲取一個連接實例
SockIOPool pool = SockIOPool.getInstance();
// 設置服務器和服務器負載量
pool.setServers( servers );
pool.setWeights( weights );
// 設置一些基本的參數
//設置初始連接數5 最小連接數 5 最大連接數 250
//設置一個連接最大空閑時間6小時
pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
pool.setMaxIdle( 1000 * 60 * 60 * 6 );
// 設置主線程睡眠時間
// 每隔30秒醒來 然后
// 開始維護 連接數大小
pool.setMaintSleep( 30 );
// 設置tcp 相關的樹形
// 關閉nagle算法
// 設置 讀取 超時3秒鐘 set the read timeout to 3 secs
// 不設置連接超時
pool.setNagle(
false
);
pool.setSocketTO( 3000 );
pool.setSocketConnectTO( 0 );
// 開始初始化 連接池
pool.initialize();
// 設置壓縮模式
//如果超過64k壓縮數據
mcc.setCompressEnable(
true
);
mcc.setCompressThreshold( 64 * 1024 );
}
public
static
void examples() {
mcc.set(
"foo"
,
"This is a test
String
"
);
String
bar = mcc.get(
"foo"
);
}
}
MemCachedClient 類 常用的方法說明
創建 client對象 設置參數:
MemCachedClient mc = new MemCachedClient();
//壓縮模式
mc.setCompressEnable(true);
// 如果 cache數據 大于4 KB 就啟用壓縮
mc.setCompressThreshold(4096);
// 基本類型tostring方法
// 通常不需要設置
mc.setPrimitiveAsString(true);
存儲一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"cacheKey1"
;
Object
value = SomeClass.getObject();
mc.set(key, value);
用客戶端hashcode 存儲一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"cacheKey1"
;
Object
value = SomeClass.getObject();
Integer
hash =
new
Integer
(45);
mc.set(key, value, hash);
set方法:在cache中存儲一個指定對象
add 和replace 方法功能差不多
add -- 如果不存在 這個key的對象,將會存儲一個對象到cache中
replace --只有當存在指定key對象的時候 會覆蓋已有對象
刪除一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"cacheKey1"
;
mc.delete(key);
結合hashcode 刪除一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"cacheKey1"
;
Integer
hash =
new
Integer
(45);
mc.delete(key, hashCode);
怎么cache計數,增 減計數:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"counterKey"
;
mc.storeCounter(key,
new
Integer
(100));
System
.out.println(
"counter after adding 1: "
mc.incr(key));
System
.out.println(
"counter after adding 5: "
mc.incr(key, 5));
System
.out.println(
"counter after subtracting 4: "
mc.decr(key, 4));
System
.out.println(
"counter after subtracting 1: "
mc.decr(key));
利用客戶端的hashcode存儲計數 增減 計數:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"counterKey"
;
Integer
hash =
new
Integer
(45);
mc.storeCounter(key,
new
Integer
(100), hash);
System
.out.println(
"counter after adding 1: "
mc.incr(key, 1, hash));
System
.out.println(
"counter after adding 5: "
mc.incr(key, 5, hash));
System
.out.println(
"counter after subtracting 4: "
mc.decr(key, 4, hash));
System
.out.println(
"counter after subtracting 1: "
mc.decr(key, 1, hash));
獲取一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"key"
;
Object
value = mc.get(key);
用客戶端hashcode獲取一個對象:
MemCachedClient mc =
new
MemCachedClient();
String
key =
"key"
;
Integer
hash =
new
Integer
(45);
Object
value = mc.get(key, hash);
從cache 中獲取多個對象
MemCachedClient mc =
new
MemCachedClient();
String
[] keys ={
"key"
,
"key1"
,
"key2"
};Mapvalues = mc.getMulti(keys);
用客戶端hashcode() 從cache中獲取多個對象
MemCachedClient mc =
new
MemCachedClient();
String
[] keys = {
"key"
,
"key1"
,
"key2"
};
Integer
[] hashes =
{
new
Integer
(45),
new
Integer
(32),
new
Integer
(44) };
Map<
Object
> values = mc.getMulti(keys, hashes);
清空所有的對象
MemCachedClient mc =
new
MemCachedClient();
mc.flushAll();
得到服務器memcached的狀態信息
MemCachedClient mc =
new
MemCachedClient();
Map stats = mc.stats();
注意點
1:Failover/Failback
當一個memcached服務器失效的時候客戶端默認會failover另一個服務去.
如果失效的服務器 恢復運行,客戶端會返回到原來連接的服務器.
如果你不想用這個功能 設置下面的參數
pool.setFailover( false );
pool.setFailback( false );
2:序列化
Boolean
Byte
String
Character
StringBuffer
StringBuilder
Short
Long
Double
Float
Date
java默認的類型沒有實現序列化 可以設置
mcc.setPrimitiveAsString( true )替代.
Externalizable 實現序列化,可以節省cache 對象的大小。從而節省網絡帶寬和內存空間。
出處:http://hqman.blog.bokee.net/bloggermodule/blog_printEntry.do?id=980314
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

