欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、引言

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

二、Guava Cache

理論介紹

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

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

實(shí)戰(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 是一個(gè)廣泛使用的開(kāi)源緩存框架,適用于分布式和非分布式環(huán)境。它的特點(diǎn)有:
豐富的特性:支持多種緩存策略、持久化、集群等功能。
配置靈活:可以通過(guò) XML 或注解進(jìn)行配置。
社區(qū)活躍:擁有龐大的用戶群體和活躍的社區(qū)支持。

實(shí)戰(zhàn)演示

pom

<dependencies>
    <!-- Ehcache 核心庫(kù) -->
    <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 框架提供的緩存抽象層,可以與多種緩存實(shí)現(xiàn)無(wú)縫集成。它的特點(diǎn)包括:
聲明式緩存:通過(guò)注解簡(jiǎn)化緩存邏輯的實(shí)現(xiàn)。
高度集成:與 Spring 生態(tài)系統(tǒng)緊密集成,方便與其他組件協(xié)同工作。
靈活選擇:支持多種緩存提供者,如 ConcurrentMapCache、Ehcache、Caffeine 等。

實(shí)戰(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) {
        // 模擬耗時(shí)操作
        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);
}

六、總結(jié)

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

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

相關(guān)文章

  • Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)

    Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)

    這篇文章主要介紹了Java中SpringBoot如何實(shí)現(xiàn)基本的增刪改查,前后端分離版,沒(méi)有和前端進(jìn)行聯(lián)系,感興趣的小伙伴可以借鑒閱讀本文
    2023-03-03
  • Mybatis如何獲取最新插入數(shù)據(jù)的id

    Mybatis如何獲取最新插入數(shù)據(jù)的id

    這篇文章主要介紹了Mybatis如何獲取最新插入數(shù)據(jù)的id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽(tīng)詳解

    Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽(tīng)詳解

    這篇文章主要介紹了Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽(tīng)詳解,Curtor框架中一共有三個(gè)實(shí)現(xiàn)監(jiān)聽(tīng)的方式,一種是NodeCache監(jiān)聽(tīng)指定節(jié)點(diǎn),一種是pathChildrenCache監(jiān)聽(tīng)子節(jié)點(diǎn),一種是TreeCache可以監(jiān)控所有節(jié)點(diǎn) 相當(dāng)于以上兩種的合集,需要的朋友可以參考下
    2023-12-12
  • java+sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    java+sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要介紹了利用java和sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),違章內(nèi)容主要建立了與sqlserver數(shù)據(jù)庫(kù)的連接開(kāi)始展開(kāi)內(nèi)容,能學(xué)到了解JDBC執(zhí)行SQL的語(yǔ)法,需要的朋友可以參考一下
    2021-12-12
  • SpringBoot新特性之全局懶加載機(jī)制

    SpringBoot新特性之全局懶加載機(jī)制

    這篇文章主要介紹了SpringBoot新特性之全局懶加載機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Java的Spring框架中bean的定義以及生命周期

    詳解Java的Spring框架中bean的定義以及生命周期

    這篇文章主要介紹了Java的Spring框架中bean的定義以及生命周期,bean的實(shí)例化是Java web開(kāi)發(fā)中的重要基礎(chǔ),需要的朋友可以參考下
    2015-12-12
  • Spring中使用ehcache緩存的方法及原理詳解

    Spring中使用ehcache緩存的方法及原理詳解

    這篇文章主要介紹了Spring中使用ehcache緩存的方法及原理詳解,ehcache具有很強(qiáng)的靈活性,提供了LRU、LFU和FIFO緩存淘汰算法,Ehcache 1.2引入了最近最少使用、最久未使用和先進(jìn)先 出緩存淘汰算法, 構(gòu)成了完整的緩存淘汰算法,,需要的朋友可以參考下
    2024-01-01
  • 詳解SpringBoot中@ConditionalOnClass注解的使用

    詳解SpringBoot中@ConditionalOnClass注解的使用

    這篇文章主要和大家詳細(xì)介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • java實(shí)現(xiàn)ip地址與十進(jìn)制數(shù)相互轉(zhuǎn)換

    java實(shí)現(xiàn)ip地址與十進(jìn)制數(shù)相互轉(zhuǎn)換

    本文介紹在java中IP地址轉(zhuǎn)換十進(jìn)制數(shù)及把10進(jìn)制再轉(zhuǎn)換成IP地址的方法及實(shí)例參考,曬出來(lái)和大家分享一下
    2012-12-12
  • Java 8對(duì)LinkedHashSet元素進(jìn)行排序的操作方法

    Java 8對(duì)LinkedHashSet元素進(jìn)行排序的操作方法

    LinkedHashSet 是 Java 集合框架中的一個(gè)類,它繼承自 HashSet,并實(shí)現(xiàn)了 Set 接口,然而,LinkedHashSet 不支持元素的排序,它僅僅保持插入順序,所以本文給大家介紹了Java 8 如何對(duì) LinkedHashSet 元素進(jìn)行排序,需要的朋友可以參考下
    2024-11-11

最新評(píng)論