使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存

要使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存,可以借助 Spring 框架的缓存管理功能。Spring Cache 提供了 @Cacheable@CachePut 注解,可以方便地管理缓存。

以下是一个示例,展示了如何在 Spring Boot 项目中使用 Caffeine 缓存,并通过注解实现每3到5秒更新缓存。

1. 添加依赖

首先,在 pom.xml 中添加 Spring Boot 和 Caffeine 的依赖:

xml 复制代码
<dependencies>
    <!-- Spring Boot Starter Cache -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    <!-- Caffeine Cache -->
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
    </dependency>
</dependencies>

2. 配置缓存管理器

在 Spring Boot 配置类中,配置 Caffeine 缓存管理器,并设置缓存项的过期时间为3到5秒。

java 复制代码
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(3, TimeUnit.SECONDS));
        return cacheManager;
    }
}

3. 使用注解进行缓存管理

在业务方法上使用 @Cacheable 注解来缓存方法的结果,并在需要更新缓存的地方使用 @CachePut 注解。

java 复制代码
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;

@Service
public class DataService {

    @Cacheable(value = "dataCache", key = "#key")
    public String fetchData(String key) {
        // 模拟数据加载过程
        System.out.println("Fetching data for key: " + key);
        return "Data for " + key;
    }

    @CachePut(value = "dataCache", key = "#key")
    public String updateData(String key, String newData) {
        // 更新数据
        System.out.println("Updating data for key: " + key);
        return newData;
    }
}

4. 测试缓存

创建一个简单的控制器来测试缓存功能。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DataController {

    @Autowired
    private DataService dataService;

    @GetMapping("/data")
    public String getData(@RequestParam String key) {
        return dataService.fetchData(key);
    }

    @GetMapping("/update")
    public String updateData(@RequestParam String key, @RequestParam String newData) {
        return dataService.updateData(key, newData);
    }
}

解释

  1. 配置缓存管理器

    • CacheConfig 类中配置了 Caffeine 缓存管理器,并设置了缓存项在写入后3秒过期。
  2. 使用注解进行缓存管理

    • @Cacheable 注解用于缓存方法的结果。当方法参数相同且缓存中存在结果时,不会执行方法体,直接返回缓存中的结果。
    • @CachePut 注解用于更新缓存中的数据。每次调用该方法时,都会更新缓存中的数据。
  3. 测试缓存

    • DataController 类提供了两个端点,一个用于获取数据,另一个用于更新数据。

通过这种方式,你可以轻松地在业务方法上使用注解来管理缓存,并实现每3到5秒更新缓存的效果。

相关推荐
qq_3273427310 分钟前
Java实现离线身份证号码OCR识别
java·开发语言
Oak Zhang33 分钟前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
门牙咬脆骨1 小时前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
门牙咬脆骨1 小时前
【Redis】GEO数据结构
数据库·redis·缓存
阿龟在奔跑1 小时前
引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
java·jvm·安全·list
飞滕人生TYF1 小时前
m个数 生成n个数的所有组合 详解
java·递归
代码小鑫2 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖2 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
激流丶2 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka
周全全2 小时前
Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现
java·vue.js·spring boot·安全·php