當前位置:
首頁 > 知識 > JFinal框架學習——cache的簡單使用

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

一.關於緩存

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

二.緩存的作用

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

三.JFinal中Cache緩存的使用

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

1.Cache的相關配置:

引入ehcache的jar包

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

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

在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的具體實現方式:

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()方法中,可以使用如下方式來對自定義緩存以及默認緩存進行切換。

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

4.

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

代碼生成x264編碼flv記錄
SpringBoot整合MyBatis,MySql之從前台頁面到資料庫的小Demo

TAG:程序員小新人學習 |