当前位置: 代码网 > it编程>编程语言>Java > Java实现本地缓存的四种方案(Guava Cache、Caffeine、Ehcach 和Spring Cache)

Java实现本地缓存的四种方案(Guava Cache、Caffeine、Ehcach 和Spring Cache)

2025年01月01日 Java 我要评论
一、引言在现代应用程序开发中,缓存是提高性能和响应速度的关键技术之一。java 提供了多种本地缓存解决方案,每种方案都有其特点和适用场景。本文将介绍四种常见的 java 本地缓存实现:guava ca

一、引言

在现代应用程序开发中,缓存是提高性能和响应速度的关键技术之一。java 提供了多种本地缓存解决方案,每种方案都有其特点和适用场景。本文将介绍四种常见的 java 本地缓存实现:guava cache、caffeine、ehcache 和 spring cache。

二、guava cache

理论介绍

guava cache 是 google guava 库的一部分,提供了轻量级的本地缓存功能。它具有以下特点:
简单易用:api 设计简洁,易于集成到项目中。
自动回收:支持基于时间或引用的自动回收机制。
并发支持:内置高效的并发控制,适合多线程环境。

实战演示

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 的优点并进行了优化。它的特点包括:
高性能:比 guava cache 更快,特别是在高并发环境下。
灵活配置:支持多种缓存策略,如 lru(最近最少使用)、lfu(最不经常使用)等。
内存友好:通过弱引用和软引用来减少内存占用。

实战演示

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 是一个广泛使用的开源缓存框架,适用于分布式和非分布式环境。它的特点有:
丰富的特性:支持多种缓存策略、持久化、集群等功能。
配置灵活:可以通过 xml 或注解进行配置。
社区活跃:拥有庞大的用户群体和活跃的社区支持。

实战演示

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 框架提供的缓存抽象层,可以与多种缓存实现无缝集成。它的特点包括:
声明式缓存:通过注解简化缓存逻辑的实现。
高度集成:与 spring 生态系统紧密集成,方便与其他组件协同工作。
灵活选择:支持多种缓存提供者,如 concurrentmapcache、ehcache、caffeine 等。

实战演示

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高性能,灵活配置 高并发环境,适合对性能敏感的应用;ehcache功能丰富,配置灵活,适合分布式系统,需要复杂缓存策略;spring cache 是声明式缓存,高度集成 ,适合spring 应用,需要快速集成缓存。在实际的开放中,我们可以根据具体需求选择合适的缓存方案,可以显著提升应用程序的性能和用户体验。

以上就是java实现本地缓存的四种方案(guava cache、caffeine、ehcach 和spring cache)的详细内容,更多关于java本地缓存的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com