Java本地緩存實(shí)現(xiàn)代碼示例
Java本地緩存
Java實(shí)現(xiàn)本地緩存的方式有很多,其中比較常見的有HashMap、Guava Cache、Caffeine和Encahche等。這些緩存技術(shù)各有優(yōu)缺點(diǎn),你可以根據(jù)自己的需求選擇適合自己的緩存技術(shù)。
以下是一些詳細(xì)介紹:
HashMap:通過Map的底層方式,直接將需要緩存的對(duì)象放在內(nèi)存中。優(yōu)點(diǎn)是簡單粗暴,不需要引入第三方包,比較適合一些比較簡單的場景。缺點(diǎn)是沒有緩存淘汰策略,定制化開發(fā)成本高。
Guava Cache:Guava是一個(gè)Google開源的項(xiàng)目,提供了一些Java工具類和庫。Guava Cache是Guava提供的一個(gè)本地緩存框架,它使用LRU算法來管理緩存。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Guava庫。
Caffeine:Caffeine是一個(gè)高性能的Java本地緩存庫,它使用了基于時(shí)間戳的過期策略和可擴(kuò)展性設(shè)計(jì)。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Caffeine庫。
Encahche:Encahche是一個(gè)輕量級(jí)的Java本地緩存庫,它使用了基于時(shí)間戳的過期策略和可擴(kuò)展性設(shè)計(jì)。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Encahche庫。
示例代碼
1.Guava Cache示例代碼
以下是使用Guava Cache實(shí)現(xiàn)Java本地緩存的示例代碼:
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.concurrent.ExecutionException; public class GuavaCacheExample { private static final LoadingCache<String, String> CACHE = CacheBuilder.newBuilder() .maximumSize(100) // 設(shè)置緩存最大容量為100 .build(new CacheLoader<String, String>() { @Override public String load(String key) throws Exception { // 從數(shù)據(jù)庫中查詢數(shù)據(jù)并返回 return queryDataFromDatabase(key); } }); public static void main(String[] args) throws Exception { // 從緩存中獲取數(shù)據(jù) String data = CACHE.get("key"); System.out.println(data); } }
2.Caffeine示例代碼
以下是使用Caffeine實(shí)現(xiàn)Java本地緩存的示例代碼:
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import java.util.concurrent.TimeUnit; public class CaffeineExample { private static final Cache<String, String> CACHE = Caffeine.newBuilder() .maximumSize(100) // 設(shè)置緩存最大容量為100 .expireAfterWrite(10, TimeUnit.MINUTES) // 設(shè)置緩存過期時(shí)間為10分鐘 .build(); public static void main(String[] args) throws Exception { // 從緩存中獲取數(shù)據(jù) String data = CACHE.get("key", new Callable<String>() { @Override public String call() throws Exception { // 從數(shù)據(jù)庫中查詢數(shù)據(jù)并返回 return queryDataFromDatabase("key"); } }); System.out.println(data); } }
3.Encahche示例代碼
以下是使用Encahche實(shí)現(xiàn)Java本地緩存的示例代碼:
import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.Builder; import org.ehcache.config.Configuration; import org.ehcache.config.units.MemoryUnit; public class EncahcheExample { private static final Cache<String, String> CACHE = CacheManager.create() .newCache("myCache", new Configuration() .withSizeOfMaxObjectSize(1024 * 1024) // 設(shè)置緩存最大容量為1MB .withExpiry(10, TimeUnit.MINUTES)) // 設(shè)置緩存過期時(shí)間為10分鐘 .build(); public static void main(String[] args) throws Exception { // 從緩存中獲取數(shù)據(jù) String data = CACHE.get("key"); System.out.println(data); } }
總結(jié)
到此這篇關(guān)于Java本地緩存實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java本地緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java中的數(shù)組與字符串相關(guān)知識(shí)
這篇文章主要介紹了詳解Java中的數(shù)組與字符串相關(guān)知識(shí),包括操作字符串的一些基本方法列舉,需要的朋友可以參考下2015-09-09PrintStream和PrintWriter的區(qū)別簡介
這篇文章主要介紹了PrintStream和PrintWriter的區(qū)別簡介,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解
這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09java集合 collection-list-LinkedList詳解
下面小編就為大家?guī)硪黄猨ava集合 collection-list-LinkedList詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01Java POI實(shí)現(xiàn)將導(dǎo)入Excel文件的示例代碼
這篇文章主要介紹了Java POI實(shí)現(xiàn)將導(dǎo)入Excel文件的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02