亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Java寫一個簡單的緩存操作類

發布時間:2021-08-24 21:23:18 來源:億速云 閱讀:182 作者:chen 欄目:大數據

本篇內容介紹了“怎么用Java寫一個簡單的緩存操作類”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!


 

一、分析

首先分析一下緩存類該如何設計,這里我以一種非常簡單的方式來實現一個緩存類,這也是我一直以來使用的設計方案。

為了明確功能,首先定義一個接口類CacheInt,然后是緩存實現的工具類CacheUtil。然后再看其中的功能,為了存取方便,緩存應是以鍵值對的形式存取,為了適應更多的場景,所以在存取的時候可以加一個緩存過期時間,然后再加上其他常見的添加、獲取、刪除、緩存大小、是否存在key、清理過期緩存等方法,整個緩存工具的方法差不多就是這些。

緩存類需要注意的問題:

  1. 緩存對象應該是唯一的,也就是單例的;

  2. 緩存的操作方法要同步,在多線程并發條件下防止出錯;

  3. 緩存的容器應該具有較高的并發性能,ConcurrentHashMap是一個不錯的選擇。

 

二、具體實現

 

1. CacheInt接口的定義

CacheInt接口的定義如下:

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類

 

2. CacheUtil的具體實現

緩存實現的核心就是CacheUtil,下面結合注釋進行說明,為了避免文章篇幅冗雜,以下截圖就是完整源碼截圖,并且保持先后順序。

首先是類定義和其屬性定義,其中本類實例對象用volatile進行修飾提高可見性,初始化緩存容量用于初始化ConcurrentHashMap緩存容器的大小,此大小根據實際應用場景進行優化

怎么用Java寫一個簡單的緩存操作類

然后是內部類Entry的定義,該類是用來存儲實際數據的,為了方便處理過期時間,添加初始化時間戳、過期時間等屬性。

怎么用Java寫一個簡單的緩存操作類

然后是使用雙檢鎖單例方式獲取本類實例對象,因為單例只能存在唯一的特點,所以注意構造函數需要設為private

怎么用Java寫一個簡單的緩存操作類

接下來是存入緩存數據put()方法,這里的clearExpiredCache()是清理過期緩存,后面會看到方法體,因為在我項目中存入緩存的情況較少,所以這里我固定了每次存之前先清理一次過期時間緩存,這里可以根據自己項目實際情況進行優化。

怎么用Java寫一個簡單的緩存操作類

然后是獲取緩存get()方法,因為獲取數據的時間較為多數,所以這里我設定了三分之一的概率清理過期緩存,適當地釋放堆內存,并且在獲取時檢測是否過期,如果已過期然而還獲取到了,就刪除并返回空。

怎么用Java寫一個簡單的緩存操作類

然后就是比較常規的一些方法,具體可以看代碼

怎么用Java寫一個簡單的緩存操作類

最后一個方法就是清理過期緩存,這里你可以選擇啟動一個監聽線程實時地清理緩存,也可以選擇在適當時機進行一次清理,比如我這里就是在存在put和get操作時固定或概率地清理緩存。

怎么用Java寫一個簡單的緩存操作類

 

三、并發測試

普通的實現測試這里就不展示了,肯定是沒問題的,讀者簡單寫一些測試樣例即可,這里主要展示一下并發測試,因為在實際情況中存在并發處理緩存情況,為了確保其正確性,所以并發測試是必須要做的,下面放出我的測試樣例。

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類

最后測試的表現是很好,沒有出現不正確的情況,部分測試結果截圖如下:

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類

怎么用Java寫一個簡單的緩存操作類


“怎么用Java寫一個簡單的緩存操作類”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏津县| 洮南市| 阿合奇县| 祥云县| 玉龙| 奉节县| 石狮市| 朝阳区| 会理县| 新乐市| 光山县| 千阳县| 海兴县| 仙居县| 那坡县| 达尔| 吉林市| 汉川市| 浪卡子县| 信丰县| 宁阳县| 鹤峰县| 雷山县| 屯留县| 迁西县| 耿马| 敦煌市| 南部县| 安宁市| 松原市| 六盘水市| 武冈市| 罗城| 万源市| 建昌县| 简阳市| 扬中市| 延川县| 卢湾区| 江达县| 察隅县|