Memcache的使用
引用:http://hi.baidu.com/willian_zy/item/3d3d3758e23aa9c8d2e10c1d ? ?
在一些對數(shù)據(jù)讀取速度要求較高的系統(tǒng)中,二級緩存無疑是必須的,他可以將一些常用而又不常更新的數(shù)據(jù)緩存起來,減少了與數(shù)據(jù)庫直接交互的次數(shù),這樣顯然提高了速度!為了積累自己的知識,我就將它的用法記錄下來,以便于日后使用!
1.安裝Memcache客戶端,好像沒有Windows版本的,具體安裝方法gg去!
2.將源碼直接導入項目中(方便修改)
3.建立一個Cache操作類,里面需要如下代碼:
private String config = "config/memcached_cluster.xml";//這個是集群配置文件的路徑
private String cacheName = "mclient0";//這個是配置文件中一個client節(jié)點的名稱,和配置文件一致
private ICacheManager<IMemcachedCache> manager;//用于創(chuàng)建和打開Cache
private IMemcachedCache cache;//用于get、set操作
......
manager = CacheUtil.getCacheManager(IMemcachedCache.class, MemcachedCacheManager.class.getName());//獲取CacheManager的接口類
?? manager.setConfigFile(config);//設(shè)置配置文件
?? manager.start();//啟動
?? cache = manager.getCache(cacheName);//獲取配置在memcached.xml中的Cache客戶端
到這一步就已經(jīng)可以使用cache了。下面是各種用法:
object = cache.put(key, value); //存入緩存,不設(shè)置過期
object = cache.put(key, value,expiry);//存入緩存,設(shè)置過期,expiry為java.util.Date類型
object = cache.put(key, value,TTL);//存入緩存,設(shè)置過期,TTL為int類型
object = cache.get(key);//由緩存獲取值,不放入本地緩存
object = cache.get(key,localTTL);//由緩存獲取值,放入本地緩存
cache.remove(key);//移出緩存
cache.replace(key, value);//替換
我們來看看集群的配置文件:
這個是基本配置
<?xml version="1.0" encoding="UTF-8"?>
<memcached>
<client name="mclient0" compressEnable="true"
?? defaultEncoding="UTF-8" socketpool="pool0">
?? <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
</client>
<socketpool name="pool0" failover="true" initConn="5" minConn="5"
?? maxConn="250" maintSleep="5000" nagle="false" socketTO="3000"
?? aliveCheck="true">
?? <servers>10.2.224.36:33001,10.2.224.46:33001</servers>
?? <weights>3,7</weights>
</socketpool>
</memcached>
1.?????? 創(chuàng)建memcached的標簽。
2.?????? 創(chuàng)建 client的標簽。
注意:
name 屬性是程序中使用Cache的唯一標識。
socketpool 屬性將會關(guān)聯(lián)到后面的socketpool配置。
errorHandler 可選,用來處理出錯情況。注意在Tag中不要使用空格或者Tab鍵。
3.?????? 創(chuàng)建socketpool的標簽。
注意:
name 屬性和client 配置中的socketpool 屬性相關(guān)聯(lián)。
maintSleep屬性是后臺線程管理SocketIO池的檢查間隔時間,如果設(shè)置為0,則表明不需要后臺線程維護SocketIO線程池,默認需要管理。
socketTO 屬性是Socket操作超時配置,單位ms。
aliveCheck 屬性表示在使用Socket以前是否先檢查Socket狀態(tài)。
4.?????? 創(chuàng)建 servers 標簽作為socketPool的子標簽.設(shè)置memcache服務(wù)端實例地址,支持多個地址設(shè)置,例如“10.2.224.36:33001” 或 “10.2.224.36:33001, 10.2.224.46:33002”.
5.?????? 創(chuàng)建 weights 標簽作為socketPool的子標簽(可選),它表明了上面設(shè)置的服務(wù)器實例的Load權(quán)重. 例如 <weights>3,7</weights> 表示30% load 在 10.2.224.36:33001, 70% load 在 10.2.224.46:33001
?
?
<?xml version="1.0" encoding="UTF-8"?>
<memcached>
<client name="mclient0" compressEnable="true"
?? defaultEncoding="UTF-8" socketpool="pool0">
?? <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
</client>
<client name="mclient0-bck" compressEnable="true"
?? defaultEncoding="UTF-8" socketpool="pool0-bck">
?? <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
</client>
<socketpool name="pool0" failover="true" initConn="5" minConn="5"
?? maxConn="250" maintSleep="5000" nagle="false" socketTO="3000"
?? aliveCheck="true">
?? <servers>222.73.242.68:11211,222.73.242.68:11311</servers>
</socketpool>
<socketpool name="pool0-bck" failover="true" initConn="5"
?? minConn="5" maxConn="250" maintSleep="5000" nagle="false"
?? socketTO="3000" aliveCheck="true">
?? <servers>222.73.242.68:11411</servers>
</socketpool>
?
<cluster name="cluster1" mode="active">//mode = active,standby
?? <memCachedClients>mclient0, mclient0-bck</memCachedClients>
</cluster>
</memcached>
?
Memcache是集中式的Cache,因此它存在單點問題。為了解決單點問題,Memcache客戶端支持配置集群,如果配置兩個或者多個客戶端在一個集群中,那么將數(shù)據(jù)放入任何一個集群的客戶端中,都可以從其他集群中的客戶端獲取到數(shù)據(jù)(在獲取數(shù)據(jù)時將會根據(jù)key作Hash算法來選擇集群的客戶端為程序服務(wù),實現(xiàn)類似于分布式節(jié)點的功能)
???????? 集群配置很簡單. 1.創(chuàng)建cluster標簽 2. 創(chuàng)建memCachedClients 標簽作為cluster的子標簽,然后將客戶端配置到memCachedClients 標簽中。3.可以配置cluster mode,active支持多個節(jié)點可以修復性復制(不過會影響一點性能),standby不支持節(jié)點修復性復制。兩者就是冷備份和熱備份的區(qū)別。(節(jié)點修復性復制指的是當A,B兩臺機器作為集群的時候,如果A出現(xiàn)了問題,系統(tǒng)會去B獲取數(shù)據(jù),當A正常以后,如果應(yīng)用在A中沒有拿到數(shù)據(jù)可以去B獲取數(shù)據(jù),并且復制到A上,這種方式也是一種lazy的復制。)
這是下載地址:http://code.google.com/p/memcache-client-forjava/
個人能力有限,如果有錯請糾正!
轉(zhuǎn)載于:https://www.cnblogs.com/sode/archive/2012/11/27/2790597.html
總結(jié)
以上是生活随笔為你收集整理的Memcache的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activity 切换动画
- 下一篇: 10款汉兰达2.7是否涡轮增压的?