最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)本地緩存的四種方案(Guava Cache、Caffeine、Ehcach 和Spring Cache)

 更新時間:2024年12月31日 11:04:44   作者:小沈同學呀  
在現(xiàn)代應用程序開發(fā)中,緩存是提高性能和響應速度的關鍵技術之一,Java 提供了多種本地緩存解決方案,每種方案都有其特點和適用場景,本文將介紹四種常見的 Java 本地緩存實現(xiàn),需要的朋友可以參考下

一、引言

在現(xiàn)代應用程序開發(fā)中,緩存是提高性能和響應速度的關鍵技術之一。Java 提供了多種本地緩存解決方案,每種方案都有其特點和適用場景。本文將介紹四種常見的 Java 本地緩存實現(xiàn):Guava Cache、Caffeine、Ehcache 和 Spring Cache。

二、Guava Cache

理論介紹

Guava Cache 是 Google Guava 庫的一部分,提供了輕量級的本地緩存功能。它具有以下特點:
簡單易用:API 設計簡潔,易于集成到項目中。
自動回收:支持基于時間或引用的自動回收機制。
并發(fā)支持:內(nèi)置高效的并發(fā)控制,適合多線程環(huán)境。

實戰(zhàn)演示

pom

<dependencies>
    <!-- Guava Cache -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>30.1-jre</version> 
    </dependency>
</dependencies>

示例代碼

/**
 * LocalCacheTest
 * @author senfel
 * @version 1.0
 * @date 2024/12/20 17:17
 */
@SpringBootTest
public class LocalCacheTest {


    /**
     * guavaCache
     * @author senfel
     * @date 2024/12/20 17:19
     * @return void
     */
    @Test
    public void guavaCache() throws Exception{
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .maximumSize(100)
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) {
                        return "Value for " + key;
                    }
                });

        System.out.println(cache.get("key1")); // 輸出: Value for key1
    }

三、Caffeine

理論介紹

Caffeine 是一個高性能的本地緩存庫,繼承了 Guava Cache 的優(yōu)點并進行了優(yōu)化。它的特點包括:
高性能:比 Guava Cache 更快,特別是在高并發(fā)環(huán)境下。
靈活配置:支持多種緩存策略,如 LRU(最近最少使用)、LFU(最不經(jīng)常使用)等。
內(nèi)存友好:通過弱引用和軟引用來減少內(nèi)存占用。

實戰(zhàn)演示

pom

<dependencies>
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>2.9.3</version>
    </dependency>
</dependencies>

示例代碼

/**
 * caffeineCache
 * @author senfel
 * @date 2024/12/20 17:25
 * @return void
 */
@Test
public void caffeineCache() throws Exception{
    Cache<String, String> cache = Caffeine.newBuilder()
            .maximumSize(100)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .build();

    cache.put("key1", "value1");
    System.out.println(cache.getIfPresent("key1")); // 輸出: value1
}

四、Ehcache

理論介紹

Ehcache 是一個廣泛使用的開源緩存框架,適用于分布式和非分布式環(huán)境。它的特點有:
豐富的特性:支持多種緩存策略、持久化、集群等功能。
配置靈活:可以通過 XML 或注解進行配置。
社區(qū)活躍:擁有龐大的用戶群體和活躍的社區(qū)支持。

實戰(zhàn)演示

pom

<dependencies>
    <!-- Ehcache 核心庫 -->
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.10.6</version>
    </dependency>
    <!-- Ehcache 的 web 集群分布式緩存的支持 -->
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-web</artifactId>
        <version>2.0.4</version>
    </dependency>
</dependencies>

ehcache.xml

<!-- ehcache.xml -->
<ehcache>
    <cache name="exampleCache"
           maxEntriesLocalHeap="100"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"/>
</ehcache>

示例代碼

/**
 * ehcacheCache
 * @author senfel
 * @date 2024/12/20 17:31
 * @return void
 */
@Test
public void ehcacheCache() throws Exception{
    CacheManager cacheManager = CacheManager.create("D:\\workspace\\cce-demo\\src\\main\\resources\\ehcache.xml");
    Ehcache cache = cacheManager.getCache("exampleCache");

    cache.put(new Element("key1", "value1"));
    System.out.println(cache.get("key1").getObjectValue()); // 輸出: value1
}

五、Spring Cache

理論介紹

Spring Cache 是 Spring 框架提供的緩存抽象層,可以與多種緩存實現(xiàn)無縫集成。它的特點包括:
聲明式緩存:通過注解簡化緩存邏輯的實現(xiàn)。
高度集成:與 Spring 生態(tài)系統(tǒng)緊密集成,方便與其他組件協(xié)同工作。
靈活選擇:支持多種緩存提供者,如 ConcurrentMapCache、Ehcache、Caffeine 等。

實戰(zhàn)演示

pom

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.9.3</version>
</dependency>

yaml

spring:
  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=100,expireAfterWrite=10m

示例代碼

/**
 * CacheService
 * @author senfel
 * @version 1.0
 * @date 2024/12/20 17:45
 */
@Service
public class CacheService {

    /**
     * getData
     * @param key
     * @author senfel
     * @date 2024/12/20 17:53
     * @return java.lang.String
     */
    @Cacheable(value = "myCache")
    public String getData(String key) {
        // 模擬耗時操作
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Value for " + key;
    }
}
@Resource
private CacheService cacheService;

/**
 * testCache
 * @param key
 * @author senfel
 * @date 2024/12/20 18:00
 * @return java.lang.String
 */
@RequestMapping("/testCache")
public String  testCache(String key) {
    return  cacheService.getData(key);
}

六、總結

綜上所述,Guava Cache 簡單易用,自動回收 ,適合小型應用,對性能要求不高;Caffeine高性能,靈活配置 高并發(fā)環(huán)境,適合對性能敏感的應用;Ehcache功能豐富,配置靈活,適合分布式系統(tǒng),需要復雜緩存策略;Spring Cache 是聲明式緩存,高度集成 ,適合Spring 應用,需要快速集成緩存。在實際的開放中,我們可以根據(jù)具體需求選擇合適的緩存方案,可以顯著提升應用程序的性能和用戶體驗。

以上就是Java實現(xiàn)本地緩存的四種方案(Guava Cache、Caffeine、Ehcach 和Spring Cache)的詳細內(nèi)容,更多關于Java本地緩存的資料請關注腳本之家其它相關文章!

相關文章

  • Java JSON轉成List結構數(shù)據(jù)

    Java JSON轉成List結構數(shù)據(jù)

    這篇文章主要介紹了Java JSON轉成List結構數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Netty進階之ChannelPoolMap源碼解析

    Netty進階之ChannelPoolMap源碼解析

    這篇文章主要介紹了Netty進階之ChannelPoolMap源碼解析,ChannelPoolMap是用來存儲ChannelPool和指定key的一個集合Map,實際的應用場景就是服務器端是一個分布式集群服務,擁有多個配置地址,這樣我們就可以配置多個服務地址,減輕單臺服務器的壓力,需要的朋友可以參考下
    2023-11-11
  • spring整合redisson開啟緩存方式

    spring整合redisson開啟緩存方式

    這篇文章主要介紹了spring整合redisson開啟緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java之類加載機制案例講解

    Java之類加載機制案例講解

    這篇文章主要介紹了Java之類加載機制案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 利用Jackson解析JSON的詳細實現(xiàn)教程

    利用Jackson解析JSON的詳細實現(xiàn)教程

    JSON對于開發(fā)者并不陌生,如今的WEB服務等都是以JSON作為數(shù)據(jù)交換的格式。學習JSON格式的操作工具對開發(fā)者來說是必不可少的。本文將介紹如何使用Jackson開源工具庫對JSON進行常見操作,需要的可以參考一下
    2022-07-07
  • 使用Java的Spring框架編寫第一個程序Hellow world

    使用Java的Spring框架編寫第一個程序Hellow world

    這篇文章主要介紹了Java的Spring框架并用其開始編寫第一個程序Hellow world的方法,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • MyBatis中有關int和Integer的使用方式

    MyBatis中有關int和Integer的使用方式

    這篇文章主要介紹了MyBatis中有關int和Integer的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java泛型常見面試題(面試必問)

    Java泛型常見面試題(面試必問)

    泛型在java中有很重要的地位,在面向對象編程及各種設計模式中有非常廣泛的應用。java泛型知識點也是Java開發(fā)崗位必問的一個話題,今天小編就給大家普及下Java泛型常見面試題,感興趣的朋友一起看看吧
    2021-06-06
  • Java異常學習之自定義異常詳解

    Java異常學習之自定義異常詳解

    你的程序總有一天會崩潰掉,在崩潰掉的時候我們要知道它在哪,為了什么而崩潰掉,數(shù)據(jù)的保存或者丟失情況如何等問題。下面這篇文章主要給大家介紹了關于Java異常學習之自定義異常的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • java中的hashCode方法小例子

    java中的hashCode方法小例子

    這篇文章主要介紹了java中的hashCode方法小例子,有需要的朋友可以參考一下
    2013-12-12

最新評論

高州市| 同心县| 治县。| 绿春县| 宜春市| 庆元县| 玉山县| 赣州市| 南安市| 浦东新区| 兴国县| 阜宁县| 玉龙| 麟游县| 固原市| 遂宁市| 渑池县| 平和县| 定襄县| 镇康县| 日喀则市| 维西| 五华县| 高邮市| 绿春县| 上虞市| 那曲县| 陇西县| 江孜县| 滕州市| 临夏市| 封丘县| 高雄市| 新和县| 彩票| 当雄县| 辽阳市| 五台县| 广东省| 白河县| 保定市|