Java_memcached-release
一、了解和使用使用安裝memcached
在這一塊已經(jīng)有車了,就不再造了。
一個日本君寫的:
長野雅廣
memcached-
全面剖析.pdf
heiyeluren(
黑夜路人)
Memcached-
原理和使用詳解.pdf
下面截圖:





二、java memcached
客啟端的調(diào)用
2.1
下載客戶端jar
包 java_memcached-release_X.x.jar
https://github.com/gwhalin/Memcached-Java-Client
可下載最新
三、簡單Demo
建工程、拷jar
包、再拷下面代碼。
package com.ea.online.memcache;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class SimpleMemCachedClient {
protected static MemCachedClient mcc = new MemCachedClient();
protected static SockIOPool sUpool = null;
static {
String[] servers = { "localhost:11211" };
Integer[] weights = { 3, 3, 2 };
sUpool = SockIOPool.getInstance();
sUpool.setServers(servers);
sUpool.setWeights(weights);
sUpool.setMaintSleep(30);
sUpool.setNagle(false);
sUpool.setSocketTO(3000);
sUpool.setSocketConnectTO(0);
sUpool.initialize();
}
public static void main(String[] args) {
mcc.set("testKey", "This is a test String",
new Date(new Date().getTime() + 10000));// 過期時間為10秒
String bar = mcc.get("testKey").toString();
System.out.println("testKey-->" + bar);
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(mcc.get("testKey"));
}
}
}
Demo
成功后就講 下面兩個類的一些設(shè)置參數(shù):SockIOPool
、MemCachedClient
四、SockIOPool
是socket
連接池類
|
setServers(String[]
servers)
:設(shè)置服務(wù)器信息數(shù)組;
setWeights(String[]
weights)
:設(shè)置服務(wù)器權(quán)重數(shù)組;
setInitConn(int
count)
:設(shè)置初始連接數(shù);
setMinConn(int
minConn)
:設(shè)置最小連接數(shù);
setMaxConn(int
maxConn)
:設(shè)置最大連接數(shù);
setMaxIdle(long
arg0)
:設(shè)置最大處理時間;
setMaintSleep(long
arg0)
:主線程的睡眠時間;
initialize()
:初始化連接池。
|
五、MemCachedClient
類及其常用方法
|
add(String
key, Object value)
:添加一個鍵值對到緩存中;
add(String
key, Object value,Date expires)
:添加一個鍵值對到緩存中,并設(shè)置其超時時間;
set(String
key, Object value)
:在緩存中設(shè)置一個鍵的值;
set(String
key, Object value, Date expires)
:在緩存中設(shè)置一個鍵的值,并設(shè)置其超時時間;
get(String
key)
:獲得某個鍵的值。
incr(String
key)
:為某個鍵上的值執(zhí)行+1
操作;
decr(String
key)
:為某個鍵上的值執(zhí)行-1
操作;
replace(String
key, String value)
:將某個鍵的值替換成新的值;
replace(String
key, String value, Date expires)
:將某個鍵的值替換成新的值,并設(shè)置其超時時間。
|
六、Memcached
優(yōu)化
可以參考:
hyj_dx
http://hyj-dx./blog/305161
1、客戶端在與 memcached 服務(wù)建立連接之后,進行存取對象的操作,每個被存取的對象都有一個唯一的標(biāo)識符 key,存取操作均通過這個
key 進行,保存到 memcached 中的對象實際上是放置內(nèi)存中的,并不是保存在 cache 文件中的,這也是為什么 memcached
能夠如此高效快速的原因。注意,這些對象并不是持久的,服務(wù)停止之后,里邊的數(shù)據(jù)就會丟失。
2、當(dāng)存入cached的數(shù)據(jù)超過了cached的容量后會將最長時間沒調(diào)用的對象擠出,這正好應(yīng)征了cached的特征。
3、利用memcached常用的做法:在每取得一次cached對象后,重新設(shè)置這個對象的cache時間,這樣能夠使得經(jīng)常被調(diào)用的對象可以長期滯留在緩存中,使得效率增倍。
memcached 技術(shù)配置參數(shù)研究
failover表示對于服務(wù)器出現(xiàn)問題時的自動修復(fù)。
initConn初始的時候連接數(shù),
minConn表示最小閑置連接數(shù),
maxConn最大連接數(shù),
maintSleep表示是否需要延時結(jié)束
nagle是TCP對于socket創(chuàng)建的算法,
socketTO是socket連接超時時間,
aliveCheck表示心跳檢查,確定服務(wù)器的狀態(tài)。
Servers是memcached服務(wù)端開的地址和ip列表字符串,
weights是上面服務(wù)器的權(quán)重,必須數(shù)量一致,否則權(quán)重?zé)o效
可從以下幾方面考慮優(yōu)化
1. 重新設(shè)置配置參數(shù)。
2. 盡量使用小容量的數(shù)據(jù)內(nèi)容.
3. 增加memcached提高服務(wù)獲取的內(nèi)存總量、提高命中率。
4. 可以采用多個memcache服務(wù)進行偵聽,分開處理,針對服務(wù)提供的頻繁度劃分服務(wù)內(nèi)存
5. 根據(jù)服務(wù)器的性能不同設(shè)置權(quán)重 weights
6. 對需要使用memcache服務(wù)的機器ip,服務(wù)端做訪問限制。
避免memcached里的數(shù)據(jù)不會被別有心意的人再利用,或責(zé)保證服務(wù)器的內(nèi)存不被漫天遍地的垃圾數(shù)據(jù)所堆積,造成命中極低
7. 優(yōu)化memcached客戶端的代碼。
、、、、、、、、、、
七、小技巧
h 顯示幫助
-p 監(jiān)聽的端口
-l 連接的IP地址, 默認是本機
-d start 啟動memcached服務(wù)
-d restart 重起memcached服務(wù)
-d stop|shutdown 關(guān)閉正在運行的memcached服務(wù)
-d install 安裝memcached服務(wù)
-d uninstall 卸載memcached服務(wù)
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內(nèi)存使用,單位MB。默認為64MB
-M 內(nèi)存耗盡時返回錯誤,而不是刪除項
-c 最大同時連接數(shù),默認為1024
-f 塊大小增長因子,默認為1.25
-n 最小分配空間,key+value+flags默認為48