JFinal框架學習-----cache的簡單使用

一.關於緩存

  Web緩存是指一個Web資源(如html頁面,圖片,js,數據等)存在於Web服務器和客戶端(瀏覽器)之間的副本。緩存會根據進來的請求保存輸出內容的副本;當下一個請求來到的時候,若是是相同的URL,緩存會根據緩存機制決定是直接使用副本響應訪問請求,仍是向源服務器再次發送請求。比較常見的就是瀏覽器會緩存訪問過網站的網頁,當再次訪問這個URL地址的時候,若是網頁沒有更新,就不會再次下載網頁,而是直接使用本地緩存的網頁。只有當網站明確標識資源已經更新,瀏覽器纔會再次下載網頁。所以很好的使用緩存技術可以大大提升性能。html

二.緩存的做用

  • 減小網絡帶寬消耗(當Web緩存副本被使用時,只會產生極小的網絡流量,能夠有效的下降運營成本)。
  • 下降服務器壓力(給網絡資源設定有效期以後,用戶能夠重複使用本地的緩存,減小對源服務器的請求,間接下降服務器的壓力。同時,搜索引擎的爬蟲機器人也能根據過時機制下降爬取的頻率,也能有效下降服務器的壓力)。
  • 減小網絡延遲,加開頁面打開速度。

三.JFinal中Cache緩存的使用

  在JFinal中,默認的緩存實現時使用EhCache。java

1.Cache的相關配置:

    引入ehcache的jar包sql

 在src包下新建ehcache.xml文件,裏面爲ehcache的基本配置數據庫

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false" monitoring="autodetect"
         dynamicConfig="true">

    <!--指定一個文件,當ehcache把數據寫到硬盤上時,會默認把數據寫到該文件下-->
    <!--user.home - 用戶主目錄;user.dir - 用戶當前工做目錄;java.io.tmpdir - 默認臨時文件路徑。-->
    <diskStore path="java.io.tmpdir" />

    <!-- 設定緩存的默認數據過時策略 -->
    <defaultCache maxElementsInMemory="10000"
                  eternal="true"
                  timeToIdleSeconds="3600"
                  timeToLiveSeconds="3600"
                  overflowToDisk="true">
    </defaultCache>

    <!--自定義cache-->
    <cache  name="cacheText"
            maxElementsInMemory="10000"
            maxElementsOnDisk="1000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="900"
            timeToLiveSeconds="1800"
            memoryStoreEvictionPolicy="LFU">
    </cache>

</ehcache>

關於ehcache的配置參數的詳解:https://blog.csdn.net/huitoukest/article/details/80047935瀏覽器

2.Cache緩存 

 (1) 在UserController.class中建立一個Action:緩存

public void text(){
        List<User> user = new User().dao().findByCache("cacheText","user1","select * from user");
        setAttr("user1",user).render("index.html");
    }

   findByCache方法參數:服務器

  • cacheName爲ehcache.xml中所設置的cache的name相同,即緩存名稱。
  • key能夠理解爲數據對象的名字。
  • sql爲sql語句

(2)查看源碼網絡

    這樣運行出來你可能仍是不理解Cache在其中究竟啓到了什麼樣的做用,下面咱們來看看 findByCache的具體實現方式:ide

public List<M> findByCache(String cacheName, Object key, String sql) {
        return this.findByCache(cacheName, key, sql, DbKit.NULL_PARA_ARRAY);
    }

    public M findFirstByCache(String cacheName, Object key, String sql, Object... paras) {
        ICache cache = this._getConfig().getCache();
        M result = (Model)cache.get(cacheName, key);
        if (result == null) {
            result = this.findFirst(sql, paras);
            cache.put(cacheName, key, result);
        }

        return result;
    }

    從具體實現代碼中,咱們能夠看出,調用findByCache方法後,首先會經過getCache() 來得到Cache的配置,而後根據傳入的參數從緩存中查詢數據,若是查詢到的result結果爲空,則經過sql語句在數據庫裏查詢,並將查詢的結果存入緩存之中。反之,若是查詢的結果不爲空,則直接返回result。性能

(3)關於具體實現,咱們還能夠經過打斷點,debug的方式來理解Cache的實現。

 

3.自定義緩存:

    除了使用JFinal爲咱們提供的默認的ehcache緩存以外,咱們還能夠經過實現ICache接口,重寫ICache中的方法來自定義緩存。

package com.cache;

import com.jfinal.plugin.activerecord.cache.ICache;

public class idenCache implements ICache{
    @Override
    public <T> T get(String s, Object o) {
        return null;
    }

    @Override
    public void put(String s, Object o, Object o1) {

    }

    @Override
    public void remove(String s, Object o) {

    }

    @Override
    public void removeAll(String s) {

    }
}

使用自定義緩存時,在基本配置類中的configPlugin()方法中,可使用以下方式來對自定義緩存以及默認緩存進行切換。

 

   4.

除以上方法外,JFinal還提供了緩存插件可供使用。緩存雖能夠提升效率,可是當數據變換快時,則要謹慎使用。

相關文章
相關標籤/搜索