Spring Boot 使用本地缓存——Caffeine

在现代 Java 应用程序中,缓存是提升性能和响应速度的重要手段。Caffeine 是一个高性能的本地缓存库,专门为 Java 设计,可以用于在 Spring Boot 应用中实现本地缓存。本文将详细介绍如何在 Spring Boot 中使用 Caffeine 作为本地缓存,并提供代码示例。

什么是 Caffeine?

Caffeine 是一个由 Ben Manes 开发的高性能 Java 缓存库,相比于传统的 Guava 缓存,Caffeine 提供了更高的性能以及支持更多的缓存策略。它的设计理念是通过灵活的配置和内存管理实现最大化性能,支持自动加载、过期策略、基于权重的淘汰策略等功能。

Caffeine 的依赖配置

要在 Spring Boot 项目中使用 Caffeine,首先需要在 pom.xml 文件中添加 Caffeine 的依赖项。如下所示:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.0.5</version> <!-- 请根据需要检查最新版本 -->
</dependency>

配置 Caffeine 缓存

在 Spring Boot 中配置 Caffeine 缓存非常简单。你可以在 application.ymlapplication.properties 中设置相关的配置。以下是一个示例配置:

spring:
  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=100, expireAfterAccess=5m

在这个示例中,我们设置缓存的最大大小为 100,并在最后一次访问后 5 分钟过期。

创建缓存配置类

接下来,我们需要创建一个缓存配置类,来定义 Caffeine 缓存的 Bean。这可以通过使用 @EnableCaching 注解来开启 Spring 的缓存支持,代码示例如下:

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .maximumSize(100)   // 设置最大缓存条目
                .expireAfterAccess(5, TimeUnit.MINUTES)); // 设置过期时间
        return cacheManager;
    }
}

使用缓存

在你的服务层中,可以使用 Spring 的 @Cacheable 注解来标记需要被缓存的方法。下面是一个简单的示例:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Cacheable(value = "users", key = "#userId")
    public User getUserById(String userId) {
        // 模拟从数据库获取用户信息
        simulateSlowService(); 
        return new User(userId, "User" + userId);
    }

    // 模拟服务延时
    private void simulateSlowService() {
        try {
            Thread.sleep(3000); // 3秒
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }
}

在上面的例子中,当调用 getUserById 方法时,如果缓存中已经存在该用户的信息,那么将直接从缓存中获取,而不是再去数据库查找,从而提高性能。

清除缓存

有时我们需要清除缓存,可以使用 @CacheEvict 注解来实现。例如:

import org.springframework.cache.annotation.CacheEvict;

@CacheEvict(value = "users", key = "#userId")
public void deleteUser(String userId) {
    // 删除用户逻辑
}

总结

通过将 Caffeine 集成到 Spring Boot 应用中,你可以轻松实现高效的本地缓存,提升应用的性能。Caffeine 提供了灵活的缓存配置,支持多种缓存策略,充分满足现代应用的需求。在本文中,我们通过简单的代码示例介绍了如何配置和使用 Caffeine,希望对你的项目有所帮助。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部