<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0

     

    ——Memcached的安裝、使用實(shí)例

    文:阿蜜果

    日期:2011-2-15
    版權(quán)所有,轉(zhuǎn)載請注明出處:http://m.tkk7.com/amigoxie/archive/2011/02/15/344381.html

    1、Memcached介紹

    Memcached是高性能的,分布式的內(nèi)存對象緩存系統(tǒng),用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫負(fù)載,提升訪問速度。MemcachedDanga Interactive開發(fā),用于提升LiveJournal.com訪問速度的。LJ每秒動(dòng)態(tài)頁面訪問量幾千次,用戶700萬。Memcached將數(shù)據(jù)庫負(fù)載大幅度降低,更好的分配資源,更快速訪問。

    Memcached的最新版是采用c語言進(jìn)行開發(fā)和設(shè)計(jì)的,它是一個(gè)應(yīng)用軟件,是作為緩存服務(wù)器的服務(wù)器端運(yùn)行在服務(wù)器上的,需要使用特定的語言編寫客戶端與其進(jìn)行通信來進(jìn)行數(shù)據(jù)的緩存和獲取。

    在系統(tǒng)中,通常將Memcached安裝運(yùn)行在服務(wù)器上,然后通過對需要的數(shù)據(jù)進(jìn)行緩存,所有數(shù)據(jù)的緩存設(shè)置和存取操作,以及數(shù)據(jù)的更新后替換操作全部需要程序來進(jìn)行。

    2、Memcached的安裝

    2.1 主程序的安裝

    一般的服務(wù)器都是采用Linux,筆者只是講述在Windows上如何安裝Memcached,在Linux上的安裝請參考網(wǎng)上其它資料。

    Windows版本的下載地址為:http://code.jellycan.com/memcached/

    當(dāng)前win32的最新版本是1.2.6,下載頁面參考如下:
       

    在上圖中點(diǎn)擊“memcached-1.2.6-win32-bin.zip”進(jìn)入下載頁面,下載后,將其解壓到D盤下,解壓后的D:"memcached-1.2.6-win32-bin目錄下有一個(gè)memcached.exe。

    Windows的命令行(cmd命令進(jìn)入命令行)窗口進(jìn)入該目錄,首先運(yùn)行:

    memcached.exe -d install

    上面這行表示安裝Memcached為服務(wù),這樣才能正常運(yùn)行。接著運(yùn)行如下這樣來啟動(dòng)Memcached,還可指定-l參數(shù),表示啟動(dòng)的IP-m表示緩存大?。?/p>

    memcached.exe -d start

    若指定了-m,則表示緩存大小為-m后的數(shù)字,單位是M,例如:

    memcached.exe –l 127.0.0.1 –m 32 -d start

    運(yùn)行參考如下圖所示:
      

    2.2 Java客戶端的安裝

    下載地址為:https://github.com/gwhalin/Memcached-Java-Client

    下載頁面參考如下:
      

             在上圖中點(diǎn)擊右側(cè)區(qū)域的“Downloads”,彈出的下載小窗口如下圖:
       

             當(dāng)前最新的版本是2.5.2,點(diǎn)擊“java_memcached-release_2.5.2.zip”下載。下載后解壓,目錄結(jié)構(gòu)如下圖所示:
       

             在應(yīng)用中,需要將“java_memcached-release_2.5.2.jar”包拷貝到Java項(xiàng)目中。

    3、Memcached的使用

    3.1 創(chuàng)建項(xiàng)目

    MyEclipse中創(chuàng)建一個(gè)名為memcacheddemo的測試項(xiàng)目,src放源代碼,binclasses文件,libjar包,并將java_memcached-release_2.5.2.jar拷貝到lib目錄中,目錄結(jié)構(gòu)如下:
      

    3.2 SockIOPool類及其常用方法

             SockIOPoolsocket連接池類,常用方法如下:

    setServers(String[] servers):設(shè)置服務(wù)器信息數(shù)組;

    setWeights(String[] weights):設(shè)置服務(wù)器權(quán)重?cái)?shù)組;

    setInitConn(int count):設(shè)置初始連接數(shù);

    setMinConn(int minConn):設(shè)置最小連接數(shù);

    setMaxConn(int maxConn):設(shè)置最大連接數(shù);

    setMaxIdle(long arg0):設(shè)置最大處理時(shí)間;

    setMaintSleep(long arg0):主線程的睡眠時(shí)間;

    initialize():初始化連接池。

    3.3 MemCachedClient類及其常用方法

             MemCachedClient類用于對Memcached內(nèi)存對象緩存系統(tǒng)進(jìn)行操作,常用方法如下:

    add(String key, Object value):添加一個(gè)鍵值對到緩存中;

    add(String key, Object value,Date expires):添加一個(gè)鍵值對到緩存中,并設(shè)置其超時(shí)時(shí)間;

    set(String key, Object value):在緩存中設(shè)置一個(gè)鍵的值;

    set(String key, Object value, Date expires):在緩存中設(shè)置一個(gè)鍵的值,并設(shè)置其超時(shí)時(shí)間;

    get(String key):獲得某個(gè)鍵的值。

    incr(String key):為某個(gè)鍵上的值執(zhí)行+1操作;

    decr(String key):為某個(gè)鍵上的值執(zhí)行-1操作;

    replace(String key, String value):將某個(gè)鍵的值替換成新的值;

    replace(String key, String value, Date expires):將某個(gè)鍵的值替換成新的值,并設(shè)置其超時(shí)時(shí)間。

    3.4 使用實(shí)例

             memcacheddemo工程的源碼目錄創(chuàng)建測試的JavaMemcachedTest,該類的代碼參考如下:

    import java.util.Date;

    import com.danga.MemCached.MemCachedClient;
    import com.danga.MemCached.SockIOPool;

    /**
     * 使用memcached的緩存測試類.
     * 
    @author 阿蜜果
     
    */

    public class MemcachedTest {
        
    // 創(chuàng)建全局的唯一實(shí)例
        protected static MemCachedClient mcc = new MemCachedClient();

        
    protected static MemcachedTest memCached = new MemcachedTest();

        
    // 設(shè)置與緩存服務(wù)器的連接池
        static {
            
    // 服務(wù)器列表和其權(quán)重
            String[] servers = {"127.0.0.1:11211"};
            Integer[] weights 
    = {3};

            
    // 獲取socket連接池的實(shí)例對象
            SockIOPool pool = SockIOPool.getInstance();

            
    // 設(shè)置服務(wù)器信息
            pool.setServers(servers);
            pool.setWeights(weights);

            
    // 設(shè)置初始連接數(shù)、最小和最大連接數(shù)以及最大處理時(shí)間
            pool.setInitConn(5);
            pool.setMinConn(
    5);
            pool.setMaxConn(
    250);
            pool.setMaxIdle(
    1000 * 60 * 60 * 6);

            
    // 設(shè)置主線程的睡眠時(shí)間
            pool.setMaintSleep(30);

            
    // 設(shè)置TCP的參數(shù),連接超時(shí)等
            pool.setNagle(false);
            pool.setSocketTO(
    3000);
            pool.setSocketConnectTO(
    0);

            
    // 初始化連接池
            pool.initialize();

            
    // 壓縮設(shè)置,超過指定大小(單位為K)的數(shù)據(jù)都會(huì)被壓縮
            mcc.setCompressEnable(true);
            mcc.setCompressThreshold(
    64 * 1024);
        }


        
    /**
         * 保護(hù)型構(gòu)造方法,不允許實(shí)例化
         
    */

        
    protected MemcachedTest() {

        }


        
    /**
         * 獲取唯一實(shí)例.
         * 
    @return
         
    */

        
    public static MemcachedTest getInstance() {
            
    return memCached;
        }


        
    /**
         * 添加一個(gè)指定的值到緩存中.
         * 
    @param key 鍵
         * 
    @param value 值
         * 
    @return 在緩存中若該key不存在,并成功添加返回true,否則將返回false
         
    */

        
    public boolean add(String key, Object value) {
            
    return mcc.add(key, value);
        }


        
    /**
         * 添加一個(gè)鍵值對到緩存中.
         * 
    @param key 鍵
         * 
    @param value 值
         * 
    @param expires 超時(shí)時(shí)間
         * 
    @return 在緩存中若該key不存在,并成功添加返回true,否則將返回false
         
    */

        
    public boolean add(String key, Object value, Date expires) {
            
    return mcc.add(key, value, expires);
        }


        
    /**
         * 將某個(gè)鍵的值改變成新值,首先需要保證該鍵存在.
         * 
    @param key 鍵
         * 
    @param value 值
         * 
    @return 成功返回true,失敗返回false
         
    */

        
    public boolean replace(String key, Object value) {
            
    return mcc.replace(key, value);
        }


        
    /**
         * 將某個(gè)鍵的值改變成新值,首先需要保證該鍵存在.
         * 
    @param key 鍵
         * 
    @param value 值
         * 
    @param expires 超時(shí)時(shí)間
         * 
    @return 成功返回true,失敗返回false
         
    */

        
    public boolean replace(String key, Object value, Date expires) {
            
    return mcc.replace(key, value, expires);
        }


        
    /**
         * 添加一個(gè)指定的值到緩存中.
         * 
    @param key
         * 
    @param value
         * 
    @return 成功返回true,否則返回false
         
    */

        
    public boolean set(String key, Object value) {
            
    return mcc.set(key, value);
        }

        
        
    /**
         * 添加一個(gè)指定的值到緩存中,并設(shè)置其超時(shí)時(shí)間.
         * 
    @param key 鍵
         * 
    @param value 值
         * 
    @param expires 超時(shí)時(shí)間
         * 
    @return 成功返回true,否則返回false
         
    */

        
    public boolean set(String key, Object value, int expires) {
            
    return mcc.set(key, value, expires);
        }

        
        
    /**
         * 根據(jù)指定的關(guān)鍵字獲取對象.
         * 
    @param key
         * 
    @return 返回value
         
    */

        
    public Object get(String key) {
            
    return mcc.get(key);
        }


        
    /**
         * 將指定key的value值+1,將返回最后的value值
         * 
    @param key 
         * 
    @return 返回最后的value值
         
    */

        
    public long incr(String key) {
            
    return mcc.incr(key);
        }

        
        
    /**
         * 將指定key的value值-1,將返回最后的value值
         * 
    @param key 
         * 
    @return 返回最后的value值
         
    */

        
    public long decr(String key) {
            
    return mcc.decr(key);
        }

        
        
    /**
         * 測試方法
         * 
    @param args
         
    */

        
    public static void main(String[] args) {
            MemcachedTest cache 
    = MemcachedTest.getInstance();
            cache.set(
    "count"123);
            System.out.println(
    "count=" + cache.get("count"));
            
    boolean flag = cache.add("schedule_2""0");
            System.out.println(
    "flag=" + flag);
            System.out.println(
    "schedule_2=" + cache.get("schedule_2"));
        }

    }

          運(yùn)行結(jié)果為:

    count=123
    flag
    =true
    schedule_2
    =0

    4、附錄

             Memcached Java客戶端編程》:

    http://sailinglee.javaeye.com/blog/752847

    posted on 2011-02-15 18:06 阿蜜果 閱讀(3017) 評論(3)  編輯  收藏 所屬分類: Java 、解決方案


    FeedBack:
    # re: 在系統(tǒng)中使用內(nèi)存對象緩存系統(tǒng)(下篇)[未登錄]
    2011-02-16 09:33 | roywong
    雖然以前在IBM 論壇看過類似帖子 ,但沒有樓主這么詳細(xì)的。感謝下,學(xué)習(xí)了  回復(fù)  更多評論
      
    # re: 在系統(tǒng)中使用內(nèi)存對象緩存系統(tǒng)(下篇)
    2011-02-16 12:35 | 陳于喆
    memcached確實(shí)已經(jīng)得到了廣泛的應(yīng)用,不過始終在java的應(yīng)用不如php簡便,前面我也記錄過一點(diǎn)memcached在java應(yīng)用中碰到的一些問題和應(yīng)用http://m.tkk7.com/dongbule/archive/2010/12/08/340066.html  回復(fù)  更多評論
      
    # re: 在系統(tǒng)中使用內(nèi)存對象緩存系統(tǒng)(下篇)
    2011-02-20 17:19 | 淘寶網(wǎng)女裝2011春裝
    確實(shí),博主這篇帖子寫得非常詳細(xì),很受教?。?nbsp; 回復(fù)  更多評論
      
    <2011年2月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272812345
    6789101112

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關(guān)注blog

    積分與排名

    • 積分 - 2298115
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人五级毛片免费播放| 性xxxxx大片免费视频| 日韩吃奶摸下AA片免费观看| 亚洲视频在线观看免费| 香蕉成人免费看片视频app下载| 亚洲VA中文字幕无码一二三区| 一级毛片免费全部播放| 免费大片在线观看网站| 久久精品国产亚洲AV| 免费a级毛片网站| 成年免费大片黄在线观看com| 亚洲人成国产精品无码| 日产久久强奸免费的看| 亚洲中文字幕第一页在线| 在线观看特色大片免费网站| 久久精品国产精品亚洲艾草网| 久久99国产乱子伦精品免费| 91在线亚洲精品专区| 免费在线看v网址| 亚洲av无码专区青青草原| 亚洲AV无码之日韩精品| 2022国内精品免费福利视频| 亚洲乱码中文字幕久久孕妇黑人| a在线观看免费网址大全| 亚洲精品在线不卡| 免费观看男人免费桶女人视频| 亚洲AV永久无码精品网站在线观看| 亚洲高清偷拍一区二区三区| 免费国产污网站在线观看| 亚洲综合区图片小说区| 成人免费视频国产| 免费无码一区二区三区蜜桃| 亚洲人成777在线播放| 国产免费看插插插视频| 182tv免费视频在线观看| 色婷五月综激情亚洲综合| 亚洲国产一成久久精品国产成人综合| 日本视频在线观看永久免费| 亚洲国产精品无码久久98| 久久久久久久尹人综合网亚洲| 日韩吃奶摸下AA片免费观看|