天天看點

Memcached學習筆記 — 第四部分:Memcached Java 用戶端-gwhalin(5)-主要API解析

找了很久都找不到官方的APIdoc,木有辦法,隻有看源代碼整理個。

SocketIOPool

主要負責用戶端連接配接池,通訊和定位。2.6.0後的版本是由schooner重新實作的,隻是保持了API接口沒有改變,新的實作是:com.schooner.MemCached.SchoonerSockIOPool

public static SockIOPool getInstance()

獲得連接配接池的單态方法。這個方法有一個重載方法getInstance( String poolName ),每個poolName隻構造一個SockIOPool執行個體。預設構造的poolName是default。

public void setServers( String[] servers )

設定連接配接池可用的cache伺服器清單

public void setWeights( Integer[] weights )

設定連接配接池可用cache伺服器的權重,與servers對應,建議有多少太伺服器就相應設定多少個權重值,否則可以不設定,預設都是1:1對應。

public void setInitConn( int initConn )

設定開始時每個cache伺服器的可用連接配接數

public void setMinConn( int minConn )

設定每個伺服器最少可用連接配接數

public void setMaxConn( int maxConn )

設定每個伺服器最大可用連接配接數

public void setMaxIdle( long maxIdle )

設定可用連接配接池的最長等待時間

public void setMaintSleep( long maintSleep )

設定連接配接池維護線程的睡眠時間,設定為0,維護線程不啟動

public void setNagle( boolean nagle )

設定是否使用Nagle算法,因為我們的通訊資料量通常都比較大(相對TCP控制資料)而且要求響應及時,是以該值需要設定為false(預設是true)

public void setSocketTO( int socketTO )

設定socket的讀取等待逾時值

public void setSocketConnectTO( int socketConnectTO )

設定socket的連接配接等待逾時值

public void setAliveCheck( boolean aliveCheck )

設定連接配接心跳監測開關。設為true則每次通信都要進行連接配接是否有效的監測,造成通信次數倍增,加大網絡負載,是以該參數應該在對HA要求比較高的場合設為TRUE,預設狀态是false。

public void setFailback( boolean failback )

設定連接配接失敗恢複開關,設定為TRUE,當當機的伺服器啟動或中斷的網絡連接配接後,這個socket連接配接還可繼續使用,否則将不再使用,預設狀态是true,建議保持預設。

public void setFailover( boolean failover )

設定容錯開關,設定為TRUE,當目前socket不可用時,程式會自動查找可用連接配接并傳回,否則傳回NULL,預設狀态是true,建議保持預設。

public void setHashingAlg( int alg )

設定伺服器定位算法:

1.    使用String.hashCode()獲得hash code,該方法依賴JDK,可能和其他用戶端不相容,建議不使用

2.    使用original 相容hash算法,相容其他用戶端

3.    使用CRC32相容hash算法,相容其他用戶端,性能優于original算法

4.    使用一緻性HASH算法

采用前三種hash算法的時候,查找cache伺服器使用餘數方法。采用最後一種是一緻性HASH,也是預設算法。

public void initialize()

設定完pool參數後最後調用該方法,啟動pool。

public void shutdown

釋放連接配接池pool,釋放資源。

MemCachedClient主要方法

add方法

public boolean add(String key, Object value)

public boolean add(String key, Object value, Integer hashCode)

public boolean add(String key, Object value, Date expiry)

public boolean add(String key, Object value, Date expiry, Integer hashCode)

将資料添加到cache伺服器,如果儲存成功則傳回true

如果cache伺服器存在同樣key,則傳回false

add有4個重載方法,key和value是必須的參數,還有過期時間,hash碼兩個可選參數

注意:

1.    官方協定支援的是UNIX DATE或目前時間秒的偏移量,這裡的API支援的是是java.util.Date。

2.    hashCode是用于用戶端分布式定位的自定義hashCode值。可以不用設定,用戶端會根據設定的算法,計算key的hashCode來定位。

set方法

public boolean set(String key, Object value)

public boolean set(String key, Object value, Date expiry)

public boolean set(String key, Object value, Date expiry, Integer hashCode)

設定key對應的緩存,緩存中是否存在都可以使用。

有3個重載,key和value是必須的。過期時間和hashCode是可選。

replace方法

public boolean replace(String key, Object value)

public boolean replace(String key, Object value, Integer hashCode)

public boolean replace(String key, Object value, Date expiry)

public boolean replace(String key, Object value, Date expiry, Integer hashCode)

将資料替換cache伺服器中相同的key,如果儲存成功則傳回true,如果緩存不存在,會傳回false,請注意add/set/replace的微妙差別。

append/prepend

public boolean append(String key, Object value)

public boolean append(String key, Object value, Integer hashCode)

public boolean prepend(String key, Object value)

public boolean prepend(String key, Object value, Integer hashCode)

append表示在現有緩存前添加資料,生成新的緩存;prepend表示在現有緩存後添加資料,生成新的緩存。

分别提供2個重載。設定成功傳回true,其它或Key不存在傳回false。

get方法

public Object get(String key)

public Object get(String key, Integer hashCode)

get方法從cache伺服器擷取一個資料,沒有提供獨立的讀取逾時,是通過SocketIOPool. setSocketTO(int socketTO)統一設定的。

gets方法

public MemcachedItem gets(String key)

public MemcachedItem gets(String key, Integer hashCode)

gets出來會傳回緩存值外,還會傳回目前緩存的版本号,一般是用于協同CAS完成原子操作使用。

getMulti方法

public Map<String, Object> getMulti(String[] keys)

public Map<String, Object> getMulti(String[] keys, Integer[] hashCodes)

public Map<String, Object> getMulti(String[] keys, Integer[] hashCodes, boolean asString)

使用getMulti方法從cache伺服器擷取一組資料,get方法的數組實作,輸入參數keys是一個key數組,傳回是一個map。

getMultiArray方法

public Object[] getMultiArray(String[] keys)

public Object[] getMultiArray(String[] keys, Integer[] hashCodes)

public Object[] getMultiArray(String[] keys, Integer[] hashCodes, boolean asString)

傳回緩存的數組。

CAS方法

public boolean cas(String key, Object value, long casUnique)

public boolean cas(String key, Object value, Date expiry, long casUnique)

public boolean cas(String key, Object value, Date expiry, Integer hashCode, long casUnique)

原子設定緩存操作,通過版本号casUnique保證設定的唯一性,如果發現伺服器的緩存版本與傳入的不同,則放棄設定緩存,傳回false。請參見前面協定詳解。

Count計數相關方法

public boolean storeCounter(String key, long counter)

public boolean storeCounter(String key, Long counter)

public boolean storeCounter(String key, Long counter, Integer hashCode)

public long getCounter(String key)

public long getCounter(String key, Integer hashCode)

public long incr(String key)

public long incr(String key, long inc)

public long incr(String key, long inc, Integer hashCode)

public long decr(String key)

public long decr(String key, long inc)

public long decr(String key, long inc, Integer hashCode)

public long addOrIncr(String key)

public long addOrIncr(String key, long inc)

public long addOrIncr(String key, long inc, Integer hashCode)

public long addOrDecr(String key)

public long addOrDecr(String key, long inc)

public long addOrDecr(String key, long inc, Integer hashCode)

1.    使用storeCounter方法初始化一個計數器

2.    使用getCounter方法擷取目前的計數器值

3.    使用incr方法對計數器增量操作,隻有一個key的方法預設加1。

4.    使用decr對計數器減量操作,隻有一個key的方法預設減1。

5.    addOrIncr,addOrDecr:key存在則與incr和decr相同,不存在則相當于storeCounter

setPrimitiveAsString方法

public void setPrimitiveAsString( boolean primitiveAsString )

設定cache資料的原始類型存儲方式是String,預設值是false,隻有在确定cache的資料類型是string的情況下才設為true,這樣可以加快處理速度。

setDefaultEncoding方法

public void setDefaultEncoding( String defaultEncoding )

當primitiveAsString為true時使用的編碼轉化格式,預設值是utf-8,如果确認主要寫入資料是中文等非ASCII編碼字元,建議采用GBK等更短的編碼格式