Ehcache基於java API實現

来源:https://www.cnblogs.com/routine/archive/2019/03/16/10544238.html
-Advertisement-
Play Games

上代碼: 順利完畢!!! 有疑惑請留言,如若不對之處,感謝提出; ...


上代碼:

  1 package com.utils.cacheutils;
  2 
  3 import com.situopenapi.constant.EhcacheConstants;
  4 import com.situopenapi.constant.GestureImageConstants;
  5 import com.situopenapi.data.systemUtils.ExecResult;
  6 import net.sf.ehcache.Cache;
  7 import net.sf.ehcache.CacheManager;
  8 import net.sf.ehcache.Element;
  9 
 10 import java.util.List;
 11 
 12 /**
 13  * 使用ehcache進行數據的緩存
 14  *
 15  */
 16 public class EhcacheManager {
 17 
 18     private static CacheManager cacheManager;
 19 
 20     static {
 21         cacheManagerInit();
 22     }
 23 
 24     /**
 25      * EhcacheConstants.CACHE_NAME,                cache name
 26      * EhcacheConstants.MAX_ELEMENTS_MEMORY,       緩存最大個數
 27      * EhcacheConstants.WHETHER_OVERFLOW_TODISK,   記憶體不足時是否啟用磁碟緩存
 28      * EhcacheConstants.WHETHER_ETERNAL,           緩存中的對象是否為永久的,如果是,超過設置將被忽略,對象從不過期
 29      * EhcacheConstants.timeToLiveSeconds,         緩存數據的生存時間;元素從構建到消亡的最大時間間隔值,只在元素不是永久保存時生效;若該值為0表示該元素可以停頓無窮長的時間
 30      * EhcacheConstants.timeToIdleSeconds          對象在失效前的允許閑置時間,僅當eternal=false對象不是永久有效時使用;可選屬性,預設值是0可閑置時間無窮大;
 31      */
 32     private static CacheManager cacheManagerInit() {
 33         if (cacheManager == null) {
 34 
 35 
 36             //創建一個緩存管理器
 37             cacheManager = CacheManager.create();
 38             //建立一個緩存實例
 39             Cache memoryOnlyCache = new Cache(EhcacheConstants.CACHE_NAME, EhcacheConstants.MAX_ELEMENTS_MEMORY, EhcacheConstants.WHETHER_OVERFLOW_TODISK, EhcacheConstants.WHETHER_ETERNAL, EhcacheConstants.timeToLiveSeconds, EhcacheConstants.timeToIdleSeconds);
 40             //在記憶體管理器中添加緩存實例
 41             cacheManager.addCache(memoryOnlyCache);
 42             return cacheManager;
 43         }
 44         return cacheManager;
 45     }
 46 
 47     /**
 48      * 向緩存中添加元素
 49      *
 50      * @param key
 51      * @param value
 52      */
 53     public static void put(String ehcacheInstanceName, String key, ExecResult<Object> value) {
 54         Cache cache = cacheManager.getCache(ehcacheInstanceName);
 55         cache.put(new Element(key, value));
 56 
 57     }
 58 
 59     /**
 60      * 根據key獲取對應的value值
 61      *
 62      * @param key
 63      * @return
 64      */
 65     public static Object getValue(String ehcacheInstanceName, Object key) {
 66         Cache cache = cacheManager.getCache(ehcacheInstanceName);
 67         Object value = cache.get(key).getObjectValue();
 68         return value;
 69     }
 70 
 71     /**
 72      *獲取緩存中最新的結果
 73      *
 74      * @return   最後一次添加的結果集
 75      */
 76     public static Object getLastValue(String ehcacheInstanceName) {
 77         boolean flag = true;
 78         
 79             Cache cache = cacheManager.getCache(ehcacheInstanceName);
 80             List keys = cache.getKeys();
 81             String string = getMaxKey(keys).toString();
 82             return getValue(ehcacheInstanceName, string);;
 83     }
 84 
 85 
 86     /**
 87      * 在緩存管理器中獲取一個緩存實例
 88      * 返回緩存數據個數
 89      *
 90      * @return
 91      */
 92     public static int getCacheSize(String ehcacheInstanceName) {
 93         Cache cache = cacheManager.getCache(ehcacheInstanceName);
 94         return cache.getSize();
 95     }
 96 
 97     private static Object getMaxKey(List source) {
 98 
 99         long[] target = new long[source.size() - 1];
100         for (int i = 0; i < source.size() - 1; i++) {
101             target[i] = Long.parseLong((String) source.get(i));
102         }
103         long maxKey = target[0];
104         for (int i = 0; i < target.length; i++) {
105             if (maxKey < target[i]) {
106                 maxKey = target[i];
107             }
108         }
109         return maxKey;
110     }
111 
112 }

順利完畢!!!

有疑惑請留言,如若不對之處,感謝提出;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下午在刷題過程中,忽然想寫2048了,以彌補以前寫的那個千多行的,所以簡單思考了一下準備採取的數據結構就開始了,本以為一個小時能搞定,結果後面改bug還是多花了些時間。因為在醫院,所以聲音不敢太大,如果看,建議耳機+聲音最大,可以考慮倍速。個人感覺用C寫這些東西的意義在於,你去掉了一些花里胡哨的東西 ...
  • 文章大綱 一、加密與驗簽介紹二、介面驗簽實操三、項目源碼下載 一、加密與驗簽介紹 大多數公共網路是不安全的,一切基於HTTP協議的請求/響應(Request or Response)都是可以被截獲的、篡改、重放(重發)的。因此我們需要考慮以下幾點內容: 防偽裝攻擊(案例:在公共網路環境中,第三方 有 ...
  • 因為小白,這2天研究了好久才算是搞好。先附上一個測試完成後郵件的截圖: 上一篇有提到: unittest中實際運行了一個介面的很多條用例,而報告中只會有一條記錄。這是因為unittest test case中我只寫了一個test方法,迴圈測試數據。這樣寫用例更簡單,目前在想是從報告中處理,還是測試用 ...
  • 適合初學者理解類和方法的關係 對象是實體,需要被創建,可以為我們做事.類是規範,根據類的定義來創建對象. ...
  • 第2章學習線性表的順序表示和鏈式表示,及二者在不同情況下的時間複雜度,空間複雜度。 由於一開始是學習二者的基本操作,要組合起來實際寫一個完整程式時,連接處磕磕碰碰,不知從何入手,最後參考老師給的代碼學習了基本寫法。在一道求逆轉鏈表的填空題時,完全不會,找了各方資料,最後也是在一篇博客中(https: ...
  • class song_song: def __init__(self,lrc_file): # 定義兩個字典一個列表備用 self.song_file = lrc_file self.song_lrc ={} self.song_zhuti = {} self.song_time = [] # 將函 ...
  • “C++11就像一門新的語言。” – Bjarne Stroustrup C++11標準推出了很多有用的新特性,本文特別關註那些相比C++98更像是一門新語言的特性,理由是: (1)這些特性改變了編寫C++程式使用的代碼風格和習語【譯註 1】,通常也包括你設計C++函數庫的方式。例如,你會看到更多參 ...
  • Java中Date()類 日期轉字元串、字元串轉日期的問題 今天在寫東西的時候突然發現一個問題,就是先new 一個Date()然後將生成的值轉為字元串, 然後再將轉換後的字元串再次用new Date()轉為日期,但是轉完之後發現兩次生成的日期之間有差距?有大佬知道是什麼原因嗎? 知道的大佬麻煩說一下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...