JFinal2.2初體驗之數(shù)據(jù)緩存處理(九)

1、關(guān)于數(shù)據(jù)緩存(Cache )

在應(yīng)用程序中可使用緩存的環(huán)節(jié)是比較多的拟赊,對于如何來使用緩存,為什么要使用緩存以及生命時候使用緩存技術(shù),有興趣的小伙伴們可以去閱讀其它大牛的技術(shù)文章或博客刽严。我們今天只是對jfinal的數(shù)據(jù)緩存和插件使用做一個簡單的科普。

緩存的使用主要還是要根據(jù)應(yīng)用的特性來考慮避凝。首先得分析應(yīng)用的“變”與“不變”舞萄,哪些地方是主要用來展示的,數(shù)據(jù)操作的不是很頻繁的話管削,那可以使用緩存來提升應(yīng)用的性能鹏氧。

EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速佩谣,簡單把还。接下來我們一起來學(xué)習(xí)在jfinal中如何使用ehCache。

1.1下載jfinal框架中使用到的jar包

jar包下載地址:http://www.jfinal.com/download?file=jfinal-2.2-all.zip(需注冊賬號)

序列 名稱 備注
1、 ehcache-core-2.5.2.jar 緩存核心包
2吊履、 slf4j-api-1.6.1.jar slf4j核心接口包
3安皱、 slf4j-log4j12-1.6.1.jar slf4j調(diào)用log4j的實現(xiàn)包
1.2添加jar包到project(工程)

copy文件到projectName\WebRoot\WEB-INF\lib目錄下。

1.3 添加ehcache.xml文件

copy文件到ehcache.xml文件到project中src路徑下艇炎。

2酌伊、寫一點代碼使用cache
2.1我們來為數(shù)據(jù)讀取作一個簡單的數(shù)據(jù)緩存操作。翠花上代碼:
   /**
    * @author yetangtang
    * @see 查詢用戶信息
    * @param void
    * @return Page<Record> list
    */
    public Page<Record> queryUsetrList(){
        //使用Db中的paginate(分頁)方法缀踪。同model操作一樣
        Page<Record> list = Db.paginateByCache("userInfo", "userList", 1, 4, "select * ","from user where id > ? ",2);
        //Page<Record> list = Db.paginate(1, 4, "select * ","from user where id > ? ",2);
        //返回查詢結(jié)果
        return list;
    }
2.2配置ehcache.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="false" monitoring="autodetect"
         dynamicConfig="true">
         
    <diskStore path="java.io.tmpdir"/>
    
        <!--
       name:緩存名稱居砖。
       maxElementsInMemory:緩存最大個數(shù)。
       eternal:對象是否永久有效驴娃,一但設(shè)置了奏候,timeout將不起作用。
       timeToIdleSeconds:設(shè)置對象在失效前的允許閑置時間(單位:秒)唇敞。僅當eternal=false對象不是永久有效時使用蔗草,可選屬性,默認值是0疆柔,也就是可閑置時間無窮大咒精。
       timeToLiveSeconds:設(shè)置對象在失效前允許存活時間(單位:秒)。最大時間介于創(chuàng)建時間和失效時間之間旷档。僅當eternal=false對象不是永久有效時使用模叙,默認是0.,也就是對象存活時間無窮大鞋屈。
       overflowToDisk:當內(nèi)存中對象數(shù)量達到maxElementsInMemory時范咨,Ehcache將會對象寫到磁盤中。
       diskSpoolBufferSizeMB:這個參數(shù)設(shè)置DiskStore(磁盤緩存)的緩存區(qū)大小谐区。默認是30MB湖蜕。每個Cache都應(yīng)該有自己的一個緩沖區(qū)。
       maxElementsOnDisk:硬盤最大緩存?zhèn)€數(shù)宋列。
       diskPersistent:是否緩存虛擬機重啟期數(shù)據(jù) Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔昭抒,默認是120秒。
       memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時炼杖,Ehcache將會根據(jù)指定的策略去清理內(nèi)存灭返。默認策略是LRU(最近最少使用)。你可以設(shè)置為FIFO(先進先出)或是LFU(較少使用)坤邪。
       clearOnFlush:內(nèi)存數(shù)量最大時是否清除熙含。
    -->
     <!--默認使用的配置方式-->
    <defaultCache
           maxEntriesLocalHeap="10000"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="20"
           timeToLiveSeconds="60">
    </defaultCache>

    <!--
    Sample cache named sampleCache1
    This cache contains a maximum in memory of 10000 elements, and will expire
    an element if it is idle for more than 5 minutes and lives for more than
    10 minutes.

    If there are more than 10000 elements it will overflow to the
    disk cache, which in this configuration will go to wherever java.io.tmp is
    defined on your system. On a standard Linux system this will be /tmp"
    -->
   <!--demo中使用的配置,第一種-->
    <cache name="userInfo"
           maxEntriesLocalHeap="10000"
           maxEntriesLocalDisk="1000"
           eternal="false"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="20"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LFU"
           transactionalMode="off"
            />
            
    <!--
    Sample cache named sampleCache2
    This cache has a maximum of 1000 elements in memory. There is no overflow to disk, so 1000
    is also the maximum cache size. Note that when a cache is eternal, timeToLive and
    timeToIdle are not used and do not need to be specified.
    -->
    <!--第二種配置方式-->
    <cache name="sampleCache2"
           maxEntriesLocalHeap="1000"
           eternal="true"
           overflowToDisk="false"
           memoryStoreEvictionPolicy="FIFO"
            />

    <!--
    Sample cache named sampleCache3. This cache overflows to disk. The disk store is
    persistent between cache and VM restarts. The disk expiry thread interval is set to 10
    minutes, overriding the default of 2 minutes.
    -->
    <!--第三種配置方式-->
    <cache name="sampleCache3"
           maxEntriesLocalHeap="500"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           diskPersistent="true"
           diskExpiryThreadIntervalSeconds="1"
           memoryStoreEvictionPolicy="LFU"
            />
</ehcache>
3艇纺、探討實現(xiàn)
3.1查看方法

Db操作類中實現(xiàn)了三種分頁緩存方法怎静,我們一起來看一下第一種邮弹。第一個參數(shù)是cacheName緩存名稱,第二個是Object key(數(shù)據(jù)對象的名字蚓聘,你可以這么理解)腌乡,剩下的都比較熟悉,在此就略過夜牡。

    /**
     * Paginate by cache.
     * @see #paginate(int, int, String, String, Object...)
     * @return Page
     */
    public static Page<Record> paginateByCache(String cacheName, Object key, int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras) {
        return dbPro.paginateByCache(cacheName, key, pageNumber, pageSize, select, sqlExceptSelect, paras);
    }
3.2不知代碼真面目与纽,只緣身在代碼外
    /**
     * Paginate by cache.
     * @see #paginate(int, int, String, String, Object...)
     * @return Page
     */
    public Page<Record> paginateByCache(String cacheName, Object key, int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras) {
        //獲取配置文件
        ICache cache = config.getCache();
        //嘗試從緩存中獲取數(shù)據(jù)對象信息
        Page<Record> result = cache.get(cacheName, key);
        //如果緩存中沒有數(shù)據(jù)信息,則需要去執(zhí)行查詢塘装;
        //得到查詢結(jié)果后急迂,并將數(shù)據(jù)信息添加到緩存中。
        if (result == null) {
            result = paginate(pageNumber, pageSize, select, sqlExceptSelect, paras);
            cache.put(cacheName, key, result);
        }
        return result;
    }
3.3眼見為實蹦肴,斷點測試一下
首次讀取數(shù)據(jù)會執(zhí)行

恭喜僚碎,恭喜。至此冗尤,小伙伴們已經(jīng)學(xué)會簡單的使用緩存了听盖。接下來胀溺,我們會繼續(xù)玩一些好玩的技能點裂七。

PS:緩存雖好,依舊多結(jié)合自己系統(tǒng)的實際情況考慮仓坞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末背零,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子无埃,更是在濱河造成了極大的恐慌徙瓶,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫉称,死亡現(xiàn)場離奇詭異侦镇,居然都是意外死亡,警方通過查閱死者的電腦和手機织阅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門壳繁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荔棉,你說我怎么就攤上這事闹炉。” “怎么了润樱?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵渣触,是天一觀的道長。 經(jīng)常有香客問我壹若,道長嗅钻,這世上最難降的妖魔是什么皂冰? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮养篓,結(jié)果婚禮上灼擂,老公的妹妹穿的比我還像新娘。我一直安慰自己觉至,他們只是感情好剔应,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著语御,像睡著了一般峻贮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上应闯,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天纤控,我揣著相機與錄音,去河邊找鬼碉纺。 笑死船万,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的骨田。 我是一名探鬼主播耿导,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼态贤!你這毒婦竟也來了舱呻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤悠汽,失蹤者是張志新(化名)和其女友劉穎箱吕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柿冲,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡茬高,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了假抄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怎栽。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖慨亲,靈堂內(nèi)的尸體忽然破棺而出婚瓜,到底是詐尸還是另有隱情,我是刑警寧澤刑棵,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布巴刻,位于F島的核電站,受9級特大地震影響蛉签,放射性物質(zhì)發(fā)生泄漏胡陪。R本人自食惡果不足惜沥寥,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柠座。 院中可真熱鬧邑雅,春花似錦、人聲如沸妈经。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吹泡。三九已至骤星,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爆哑,已是汗流浹背洞难。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揭朝,地道東北人队贱。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像潭袱,于是被迫代替她去往敵國和親柱嫌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理敌卓,服務(wù)發(fā)現(xiàn)慎式,斷路器伶氢,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 理論總結(jié) 它要解決什么樣的問題趟径? 數(shù)據(jù)的訪問、存取癣防、計算太慢蜗巧、太不穩(wěn)定、太消耗資源蕾盯,同時幕屹,這樣的操作存在重復(fù)性。因...
    jiangmo閱讀 2,849評論 0 11
  • Ehcache是現(xiàn)在最流行的純Java開源緩存框架级遭,配置簡單望拖、結(jié)構(gòu)清晰、功能強大挫鸽,最初知道它说敏,是從Hibernat...
    安易學(xué)車閱讀 2,031評論 0 11
  • 影偌驚鴻稀相依, 瑤似明月連璽玉丢郊。 每個父母都是一個好演員盔沫。――題記 世界上我們唯一不能背棄的就是父母.医咨。 我的文...
    時光泡爛了過往閱讀 272評論 0 0
  • 【1】 御景園小區(qū)7號樓的牛姨一大早就沖到了物業(yè)吵架,原因是她新買的摩托車丟了架诞,車就停在小區(qū)車棚拟淮,早晨去看,沒了谴忧!...
    子魚ziyu閱讀 734評論 9 18