在Java中使用Memcached(轉)


memcache的Java客戶端調用,在網上還是有些少,很多都是php的。如何要想用Java調用memcache的服務,首先要有客戶端的支持,我們先下載一個客戶端吧。下載地址:https://github.com/gwhalin/Memcached-Java-Client。點擊下圖的“下載”圖標。

得到java_memcached-release_2.5.3.jar文件,將其添加到項目的classpath中。

下面就利用利用memcached java client來建立一個簡單的應用一個簡單的應用。

代碼如下(自於 java_memcached-release_2.5\doc\HOWTO.txt里面):

packagecom.mem;

importcom.danga.MemCached.MemCachedClient;
importcom.danga.MemCached.SockIOPool;

/**
* Created by IntelliJ IDEA.
* User: liuzhy
* Date: 2010-12-3
* Time: 16:43:36
*/
public class MemCacheInvoke {
    protected static MemCachedClient mcc = new MemCachedClient();

    static{

       // 設置緩存服務器列表,當使用分布式緩存的時,可以指定多個緩存服務器。這里應該設置為多個不同的服務,我這里將兩個服務設置為一樣的,大家不要向我學習,呵呵。
        String[] servers =
                {
                        "10.15.0.215:46697",
                        "10.15.0.215:46697",
//                        "server3.mydomain.com:1624"
                };

// 設置服務器權重
        Integer[] weights = {3, 2};

        // 創建一個Socked連接池實例
        SockIOPool pool = SockIOPool.getInstance();

      // 向連接池設置服務器和權重
        pool.setServers(servers);
        pool.setWeights(weights);

        // set some TCP settings
        // disable nagle
        // set the read timeout to 3 secs
        // and don't set a connect timeout
        pool.setNagle(false);
        pool.setSocketTO(3000);
        pool.setSocketConnectTO(0);

       // initialize the connection pool
        pool.initialize();
    }

    public static void main(String[] args) {
        mcc.set("foo", "This is a test String");
        String bar = mcc.get("foo").toString();
        System.out.println(">>> " + bar);
    }
}

這里有一個非常重要的問題需要注意:

就是上例中10.15.0.215:46697的端口,我們在memcache中啟動服務,用下面的命令啟動一個memcache服務:

./memcached -d -m 10 -u liuzhy -p 112233 -l 10.15.0.215 -P /tmp/memcached.pid 

其中112233是memcache監聽的端口,有時候,這個端口如果被占用,會重新分配一個其他端口。程序中的調用端口46697,就是因為112233被占用。

如何看memcached.pid實際的端口呢,通過這個命令:

netstat -lp | grep memcached

如果不加-p參數,缺省的端口應該是11211。 執行main函數,得到結果如下:

>>>This is a test String

 

執行后,將 mcc.set("foo", "This is a test String"); 這行注釋掉,因為已經放入緩存,所以執行main函數,還能看到字符串輸出

>>>This is a test String

轉自 http://hi.baidu.com/hivemind/item/8ff435c20709f9360831c664


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM