XMemcached發(fā)布1.1.2版本,這一版本仍然是1.1.0版本以來的改進(jìn)版本,主要的改進(jìn)如下:
1.支持設(shè)置memcached
節(jié)點權(quán)重,權(quán)重高的負(fù)載相應(yīng)比較大。
2.為部分協(xié)議添加
noreply選項,memcached 1.2.5引入了noreply支持,部分文本協(xié)議(如存儲,刪除,incr/decr等)允許附加設(shè)置一個noreply,表示客戶端不要求memcached應(yīng)答。這一特性利于批量處理。
3.支持與
spring框架的集成。
4.添加
verbosity協(xié)議,這個協(xié)議用于讓客戶端設(shè)置memcached的日志輸出級別。
5.一些細(xì)節(jié)改進(jìn)。XMemcached從0.5開始就有重連機(jī)制,在連接意外斷開的情況下會不斷地自動重連,不過間隔是10秒,現(xiàn)在改成將間隔縮小為0秒以便客戶端能及時連接。改進(jìn)了JMX支持,可以通過JMX查看節(jié)點權(quán)重和動態(tài)設(shè)置節(jié)點權(quán)重。
6.BUG修復(fù),包括:Issue 35、Issue 36、Issue 37、Issue 38等,具體請看
這里
7.去除了對spy-2.4.jar依賴,現(xiàn)在序列化部分已經(jīng)不再需要spymemcached的這個jar包。
項目主頁:
http://code.google.com/p/xmemcached/
下載地址:
http://code.google.com/p/xmemcached/downloads/list
wiki地址:
http://code.google.com/p/xmemcached/w/list
下面是關(guān)于特性的詳細(xì)說明,首先是權(quán)重的使用,看例子:
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:12000 localhost:12001"),new int[]{1,3});
MemcachedClient memcachedClient=builder.build();
現(xiàn)在的
XMemcachedClientBuilder允許傳入了兩個參數(shù),一個是InetSocketAddress組成的列表,一個是權(quán)重的數(shù)組,權(quán)重數(shù)組的元素與列表中的地址一一對應(yīng),例如這里就是將"localhost:12000"節(jié)點的權(quán)重設(shè)置為1,而將"localhost:12001"的權(quán)重設(shè)置為3。同樣在XMemcachedClientMBean中添加了兩個新的方法:
public void addOneServerWithWeight(String server, int weight)
throws IOException;
/**
* Set a memcached server's weight
*
* @param server
* @param weight
*/
public void setServerWeight(String server, int weight);
用于動態(tài)添加和修改節(jié)點的權(quán)重。
其次,為了支持
noreply選項,MemcachedClient接口引入了系列xxxWithNoReply方法,例如
public abstract void setWithNoReply(final String key, final int exp,
final Object value) throws InterruptedException, MemcachedException;
public abstract <T> void setWithNoReply(final String key, final int exp,
final T value, final Transcoder<T> transcoder)
throws InterruptedException, MemcachedException;
public abstract void addWithNoReply(final String key, final int exp,
final Object value) throws InterruptedException, MemcachedException;
public abstract void replaceWithNoReply(final String key, final int exp,
final Object value) throws InterruptedException, MemcachedException;
public void deleteWithNoReply(final String key)
throws InterruptedException, MemcachedException;
完整的列表請看changelog.txt, noreply系列方法非常適合于批量處理,比之需要等待memcached應(yīng)答的效率上提升很多。
第三,與spring的集成,通過XMemcachedClientFactoryBean可以很方便地與spring框架集成,最簡單的配置如下:
<bean name="memcachedClient"
class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean">
<property name="servers">
<value>localhost:12000 localhost:12001</value>
</property>
</bean>
只要設(shè)置servers屬性,那么就可以在任何需要的地方引用memcachedClient這個Bean.更完整的配置參考
wiki
第四,引入了對verbosity協(xié)議的支持,通過兩個新方法:
public void setLoggingLevelVerbosity(InetSocketAddress address, int level)
throws TimeoutException, InterruptedException, MemcachedException;
public void setLoggingLevelVerbosityWithNoReply(InetSocketAddress address,
int level) throws InterruptedException, MemcachedException;
其中的level就是日志級別。請注意你的memcached版本是否支持這一協(xié)議。
1.1.2是一個承前啟后的版本,按俺的計劃應(yīng)該還有個1.1.3(專注性能改進(jìn)和優(yōu)化),之后才是實現(xiàn)了二進(jìn)制協(xié)議的1.2.0。俺非常希望能有任何人給出任何建議和bug反饋。