欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Memcached Java客戶端編程

系統(tǒng) 2123 0

最近一直在做一個(gè)項(xiàng)目的前期設(shè)計(jì)工作,考慮到后期系統(tǒng)的擴(kuò)展和性能問(wèn)題也找了很多解決方法,有一個(gè)就是用到了數(shù)據(jù)庫(kù)的緩存工具memcached(當(dāng)然該工具并不僅僅局限于數(shù)據(jù)庫(kù)的緩存)。先簡(jiǎn)單的介紹下什么是memcached。

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

??? 上網(wǎng)baidu了很多東西,幾乎都差不多,而且基于java的說(shuō)的很少,所有只有在研究了各個(gè)其他語(yǔ)言類的應(yīng)用后再來(lái)嘗試在java上進(jìn)行簡(jiǎn)單的操作應(yīng) 用。先從memcached上進(jìn)行說(shuō)明,memcached的最新版是采用c語(yǔ)言進(jìn)行開發(fā)和設(shè)計(jì)的,據(jù)說(shuō)舊版的是采用perl語(yǔ)言開發(fā)的,而且它是一個(gè)應(yīng) 用軟件來(lái)的,是作為緩存服務(wù)器的服務(wù)器端運(yùn)行在服務(wù)器上的,需要使用特定的語(yǔ)言編寫客戶端與其進(jìn)行通信來(lái)進(jìn)行數(shù)據(jù)的緩存和獲取。通常我們是把 memcached安裝運(yùn)行在web服務(wù)器上,然后通過(guò)對(duì)需要的數(shù)據(jù)進(jìn)行緩存,據(jù)我目前所知,所有數(shù)據(jù)的緩存設(shè)置和存取操作,以及數(shù)據(jù)的更新后替換操作全 部需要程序來(lái)進(jìn)行,而不是自動(dòng)進(jìn)行的(自動(dòng)不知道能不能成功,呵呵)。下面從一個(gè)實(shí)際的例子來(lái)應(yīng)用memcached。

??? 首先到 http://danga.com/memcached/ 下 載memcached的windows版本和java客戶端jar包,目前最新版本是memcached-1.2.1-win32.zip和 java_memcached-release_1.6.zip,分別解壓后即可!首先是安裝運(yùn)行memcached服務(wù)器,我們將memcached- 1.2.1-win32.zip解壓后,進(jìn)入其目錄,然后運(yùn)行如下命令:

c:>memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start

??? 第一行是安裝memcached成為服務(wù),這樣才能正常運(yùn)行,否則運(yùn)行失敗!第一行是啟動(dòng)memcached的,作為測(cè)試我們就簡(jiǎn)單的只分配32M內(nèi)存 了,然后監(jiān)聽本機(jī)端口和以守護(hù)進(jìn)行運(yùn)行。執(zhí)行完畢后,我們就可以在任務(wù)管理器中見到memcached.exe這個(gè)進(jìn)程了。好了,我們的服務(wù)器已經(jīng)正常運(yùn) 行了, 下面我們就來(lái)寫java的客戶端連接程序。

??? 我們將java_memcached-release_1.6.zip解壓后的目錄中的java_memcached-release_1.6.jar文件復(fù)制到j(luò)ava項(xiàng)目的lib目錄下,然后我們來(lái)編寫代碼,比如我提供的一個(gè)應(yīng)用類如下:

    package utils.cache;

import java.util.Date;

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


/**
* 使用memcached的緩存實(shí)用類.
*
* @author 鐵木箱子
*
*/
public class MemCached
{
    // 創(chuàng)建全局的唯一實(shí)例
    protected static MemCachedClient mcc = new MemCachedClient();
   
    protected static MemCached memCached = new MemCached();
   
    // 設(shè)置與緩存服務(wù)器的連接池
    static {
        // 服務(wù)器列表和其權(quán)重
        String[] servers = {"127.0.0.1:11211"};
        Integer[] weights = {3};

        // 獲取socke連接池的實(shí)例對(duì)象
        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è)置,超過(guò)指定大小(單位為K)的數(shù)據(jù)都會(huì)被壓縮
        mcc.setCompressEnable( true );
        mcc.setCompressThreshold( 64 * 1024 );
    }
   
    /**
     * 保護(hù)型構(gòu)造方法,不允許實(shí)例化!
     *
     */
    protected MemCached()
    {
       
    }
   
    /**
     * 獲取唯一實(shí)例.
     * @return
     */
    public static MemCached getInstance()
    {
        return memCached;
    }
   
    /**
     * 添加一個(gè)指定的值到緩存中.
     * @param key
     * @param value
     * @return
     */
    public boolean add(String key, Object value)
    {
        return mcc.add(key, value);
    }
   
    public boolean add(String key, Object value, Date expiry)
    {
        return mcc.add(key, value, expiry);
    }
   
    public boolean replace(String key, Object value)
    {
        return mcc.replace(key, value);
    }
   
    public boolean replace(String key, Object value, Date expiry)
    {
        return mcc.replace(key, value, expiry);
    }
   
    /**
     * 根據(jù)指定的關(guān)鍵字獲取對(duì)象.
     * @param key
     * @return
     */
    public Object get(String key)
    {
        return mcc.get(key);
    }
   
    public static void main(String[] args)
    {
        MemCached cache = MemCached.getInstance();
        cache.add("hello", 234);
        System.out.print("get value : " + cache.get("hello"));
    }
}
  

?那么我們就可以通過(guò)簡(jiǎn)單的像main方法中操作的一樣存入一個(gè)變量,然后再取出進(jìn)行查看,我們可以看到先調(diào)用了add,然后再進(jìn)行g(shù)et,我們運(yùn)行 一次后,234這個(gè)值已經(jīng)被我們存入了memcached的緩存中的了,我們將main方法中紅色的那一行注釋掉后,我們?cè)龠\(yùn)行還是可以看到get到的 value也是234,即緩存中我們已經(jīng)存在了數(shù)據(jù)了。

??? 對(duì)基本的數(shù)據(jù)我們可以操作, 對(duì)于普通的POJO而言,如果要進(jìn)行存儲(chǔ)的話,那么比如讓其實(shí)現(xiàn)java.io.Serializable接口,因?yàn)?memcached是一個(gè)分布式的緩存服務(wù)器,多臺(tái)服務(wù)器間進(jìn)行數(shù)據(jù)共享需要將對(duì)象序列化的,所以必須實(shí)現(xiàn)該接口,否則會(huì)報(bào)錯(cuò)的 。比如我們寫一個(gè)簡(jiǎn)單的測(cè) 試Bean如下:

    class TBean implements java.io.Serializable
{
    private static final long serialVersionUID = 1945562032261336919L;
   
    private String name;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}
  

?然后我們?cè)趍ain方法中加入如下幾行代碼:

    TBean tb = new TBean();
tb.setName("鐵木箱子");
cache.add("bean", tb);
TBean tb1 = (TBean)cache.get("bean");
System.out.print("name=" + tb1.getName());
tb1.setName("鐵木箱子_修改的");
tb1 = (TBean)cache.get("bean");
System.out.print("name=" + tb1.getName());
  

? 我們首先把TBean的一個(gè)實(shí)例放入緩存中,然后再取出來(lái),并進(jìn)行名稱的 修改,然后我們?cè)偃∵@個(gè)對(duì)象,我們?cè)倏雌涿Q,發(fā)現(xiàn)修改的對(duì)象并不是緩存中的對(duì)象,而是通過(guò)序列化過(guò)來(lái)的一個(gè)實(shí)例對(duì)象,這樣我們就無(wú)須擔(dān)心對(duì)原生類的無(wú)意 修改導(dǎo)致緩存數(shù)據(jù)失效了,呵呵~~看來(lái)我也是多此一想啊。所以這 表明從緩存中獲取的對(duì)象是存入對(duì)象的一個(gè)副本,對(duì)獲取對(duì)象的修改并不能真正的修改緩存中的 數(shù)據(jù),而應(yīng)該使用其提供的replace等方法來(lái)進(jìn)行修改

??? 以上是我在windows下對(duì)memcached的一點(diǎn)小學(xué)習(xí)和實(shí)踐,在以后的項(xiàng)目開發(fā)過(guò)程中將會(huì)更深入的學(xué)習(xí)和應(yīng)用這一緩存工具,也希望和有興趣的同行一起討論學(xué)習(xí)該工具的使用~~

?

[ 轉(zhuǎn)自 : http://q.sohu.com/forum/5/topic/640252 ]

Memcached Java客戶端編程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美精品国产制服第一页 | av成人免费 | a一级黄色片 | 国产区精品 | 午夜寂寞影视在线观看 | 国产日韩视频 | 91精品国产亚洲爽啪在线观看 | 天天综合亚洲 | 美国黄色一级片 | 黄色视频a级毛片 | 一级毛片免费视频 | 全免费午夜一级毛片一级毛 | 91看点| 欧美精品在线免费观看 | 九九热国产视频 | 色倩网站 | 欧美特黄一级视频 | 成人免费无毒在线观看网站 | 狠狠色欧美亚洲狠狠色五 | 欧美一级毛片在线播放 | 欧美成在人线a免费视频 | 日韩欧美综合在线二区三区 | 日本美女久久 | 久久国产免费福利永久 | 九九精品视频一区二区三区 | 日韩精品极品视频在线观看免费 | 国产传媒在线播放 | 成人av观看 | 精品一区二区三区在线视频 | 日韩亚洲欧美视频 | 国产大片免费天天看 | 欧美日日射 | 亚洲精品免费在线观看 | 男女做性无遮挡免费视频 | 婷婷久久综合网 | 伊人色综合网 | 欧美一级黄视频 | 国产精品九九九久久九九 | 天天色综合天天 | 国产精品观看 | 亚洲免费网站 |