Java本地緩存實(shí)現(xiàn)代碼示例
Java本地緩存
Java實(shí)現(xiàn)本地緩存的方式有很多,其中比較常見(jiàn)的有HashMap、Guava Cache、Caffeine和Encahche等。這些緩存技術(shù)各有優(yōu)缺點(diǎn),你可以根據(jù)自己的需求選擇適合自己的緩存技術(shù)。
以下是一些詳細(xì)介紹:
HashMap:通過(guò)Map的底層方式,直接將需要緩存的對(duì)象放在內(nèi)存中。優(yōu)點(diǎn)是簡(jiǎn)單粗暴,不需要引入第三方包,比較適合一些比較簡(jiǎn)單的場(chǎng)景。缺點(diǎn)是沒(méi)有緩存淘汰策略,定制化開發(fā)成本高。
Guava Cache:Guava是一個(gè)Google開源的項(xiàng)目,提供了一些Java工具類和庫(kù)。Guava Cache是Guava提供的一個(gè)本地緩存框架,它使用LRU算法來(lái)管理緩存。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Guava庫(kù)。
Caffeine:Caffeine是一個(gè)高性能的Java本地緩存庫(kù),它使用了基于時(shí)間戳的過(guò)期策略和可擴(kuò)展性設(shè)計(jì)。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Caffeine庫(kù)。
Encahche:Encahche是一個(gè)輕量級(jí)的Java本地緩存庫(kù),它使用了基于時(shí)間戳的過(guò)期策略和可擴(kuò)展性設(shè)計(jì)。優(yōu)點(diǎn)是性能好,支持異步加載和批量操作。缺點(diǎn)是需要引入Encahche庫(kù)。
示例代碼
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ù)庫(kù)中查詢數(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è)置緩存過(guò)期時(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ù)庫(kù)中查詢數(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è)置緩存過(guò)期時(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)文章
關(guān)于Java利用反射實(shí)現(xiàn)動(dòng)態(tài)運(yùn)行一行或多行代碼
這篇文章主要介紹了關(guān)于Java利用反射實(shí)現(xiàn)動(dòng)態(tài)運(yùn)行一行或多行代碼,借鑒了別人的方法和書上的內(nèi)容,最后將題目完成了,和大家一起分享以下解決方法,需要的朋友可以參考下2023-04-04
SpringCloud Gateway動(dòng)態(tài)轉(zhuǎn)發(fā)后端服務(wù)實(shí)現(xiàn)過(guò)程講解
這篇文章主要介紹了SpringCloud Gateway動(dòng)態(tài)轉(zhuǎn)發(fā)后端服務(wù)實(shí)現(xiàn)過(guò)程,簡(jiǎn)單的路由轉(zhuǎn)發(fā)可以通過(guò)SpringCloudGateway的配置文件實(shí)現(xiàn),在一些業(yè)務(wù)場(chǎng)景種,會(huì)需要?jiǎng)討B(tài)替換路由配置中的后端服務(wù)地址,單純靠配置文件無(wú)法滿足這種需求2023-03-03
Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
什么是正則表達(dá)式,正則表達(dá)式的作用是什么?這篇文章主要為大家詳細(xì)介紹了Java正則表達(dá)式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
一文詳解SpringMVC中的@RequestMapping注解
@RequestMapping是一個(gè)用于映射HTTP請(qǐng)求到處理方法的注解,在Spring框架中使用,它可以用于控制器類和處理方法上,用來(lái)指定處理不同URL路徑的請(qǐng)求,并定義請(qǐng)求的方法等,本文小編將給大家詳細(xì)的介紹一下SpringMVC中的@RequestMapping注解,需要的朋友可以參考下2023-08-08

