SpringBoot缓存注解使用

简介: Spring Boot 提供了一套方便的缓存注解,用于简化缓存管理。通过 `@Cacheable`、`@CachePut`、`@CacheEvict` 和 `@Caching` 等注解,开发者可以轻松地实现方法级别的缓存操作,从而提升应用的性能和响应速度。合理使用这些注解可以大大减少数据库的访问频率,优化系统性能。

Spring Boot 缓存注解使用

Spring Boot 提供了一套强大的缓存注解机制,用于简化和优化应用程序的缓存管理。通过缓存机制,开发者可以显著提升应用的性能,减少数据库访问频率。本文将详细介绍 Spring Boot 缓存注解的使用方法,包括配置、常用注解及其用法。

一、缓存配置

在 Spring Boot 中使用缓存,首先需要进行缓存配置。可以通过配置类或配置文件来启用缓存支持。

1. 添加依赖

pom.xml 文件中添加缓存依赖。这里以使用 EhCache 为例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>
​

2. 启用缓存支持

在 Spring Boot 应用的主类上添加 @EnableCaching 注解:

@SpringBootApplication
@EnableCaching
public class CacheApplication {
    public static void main(String[] args) {
        SpringApplication.run(CacheApplication.class, args);
    }
}
​

3. 配置缓存管理器

可以在配置类中配置缓存管理器:

@Configuration
public class CacheConfig {
    @Bean
    public CacheManager cacheManager() {
        return new EhCacheCacheManager(ehCacheCacheManager().getObject());
    }

    @Bean
    public EhCacheManagerFactoryBean ehCacheCacheManager() {
        EhCacheManagerFactoryBean factory = new EhCacheManagerFactoryBean();
        factory.setConfigLocation(new ClassPathResource("ehcache.xml"));
        factory.setShared(true);
        return factory;
    }
}
​

二、常用缓存注解

Spring 提供了一些常用的缓存注解,用于在方法级别进行缓存操作。

1. @Cacheable

@Cacheable 注解用于标记方法的返回值可以被缓存。每次调用该方法时,都会先检查缓存是否存在,如果存在则直接返回缓存结果,否则执行方法并将结果缓存。

@Cacheable(value = "users", key = "#userId")
public User getUserById(Long userId) {
    return userRepository.findById(userId).orElse(null);
}
​

2. @CachePut

@CachePut 注解用于更新缓存。每次调用该方法时,都会执行方法并将结果缓存。

@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    userRepository.save(user);
    return user;
}
​

3. @CacheEvict

@CacheEvict 注解用于移除缓存。可以指定 allEntries 属性来清空整个缓存。

@CacheEvict(value = "users", key = "#userId")
public void deleteUser(Long userId) {
    userRepository.deleteById(userId);
}

@CacheEvict(value = "users", allEntries = true)
public void clearCache() {
    // 清空缓存
}
​

4. @Caching

@Caching 注解用于组合多个缓存操作注解。

@Caching(
    put = { @CachePut(value = "users", key = "#user.id") },
    evict = { @CacheEvict(value = "users", key = "#user.id") }
)
public User saveUser(User user) {
    userRepository.save(user);
    return user;
}
​

三、缓存示例

以下是一个完整的示例,展示了如何在 Spring Boot 应用中使用缓存注解。

1. 配置文件

src/main/resources 目录下创建 ehcache.xml 配置文件:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd">

    <cache name="users"
           maxEntriesLocalHeap="1000"
           timeToLiveSeconds="3600"
           memoryStoreEvictionPolicy="LRU">
    </cache>

</ehcache>
​

2. 服务类

创建用户服务类,使用缓存注解:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Cacheable(value = "users", key = "#userId")
    public User getUserById(Long userId) {
        return userRepository.findById(userId).orElse(null);
    }

    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        userRepository.save(user);
        return user;
    }

    @CacheEvict(value = "users", key = "#userId")
    public void deleteUser(Long userId) {
        userRepository.deleteById(userId);
    }

    @CacheEvict(value = "users", allEntries = true)
    public void clearCache() {
        // 清空缓存
    }
}
​

思维导图

Spring Boot 缓存注解使用

缓存配置

添加依赖

启用缓存支持

配置缓存管理器

常用缓存注解

@Cacheable

@CachePut

@CacheEvict

@Caching

缓存示例

配置文件

服务类

总结

Spring Boot 提供了一套方便的缓存注解,用于简化缓存管理。通过 @Cacheable@CachePut@CacheEvict@Caching 等注解,开发者可以轻松地实现方法级别的缓存操作,从而提升应用的性能和响应速度。合理使用这些注解可以大大减少数据库的访问频率,优化系统性能。

目录
相关文章
|
13天前
|
编解码 文字识别 语音技术
MiniCPM-o 2.6:流式全模态,端到端,多模态端侧大模型来了!
MiniCPM-o 2.6 是 MiniCPM-o 系列的最新、性能最佳模型。该模型基于 SigLip-400M、Whisper-medium-300M、ChatTTS-200M 和 Qwen2.5-7B 构建,共 8B 参数,通过端到端方式训练和推理。相比 MiniCPM-V 2.6,该模型在性能上有了显著提升,并支持了实时语音对话和多模态流式交互的新功能。
|
2天前
|
存储 Java 程序员
菜鸟之路Day10一一集合进阶(三)
《菜鸟之路Day10——集合进阶(三)》由blue编写,发布于2025年1月28日。文章基于黑马程序员教程,介绍了Java中双列集合的特点、体系结构及Map接口的常见API和遍历方式。重点讲解了HashMap、LinkedHashMap和TreeMap的特性与应用场景,并通过多个实例演示了它们的使用方法,帮助读者深入理解集合类的高级用法。
105 72
|
3天前
|
机器学习/深度学习 算法 数据可视化
利用SVM(支持向量机)分类算法对鸢尾花数据集进行分类
本文介绍了如何使用支持向量机(SVM)算法对鸢尾花数据集进行分类。作者通过Python的sklearn库加载数据,并利用pandas、matplotlib等工具进行数据分析和可视化。
109 70
|
1天前
|
Web App开发 网络协议 Linux
A Brief Introduction to DNS
This article is also posted on my blog, feel free refer to it for the latest revisions: [A Brief Introduction to DNS](https://blog.timerring.com/posts/a-brief-introduction-to-dns/)
135 77
A Brief Introduction to DNS
|
1天前
|
网络协议 应用服务中间件 网络安全
Nginx,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
133 70
Nginx,正向代理
|
2天前
|
安全
Deploy Github Pages With GPG Signing
This article is also posted on my blog, feel free refer to it for the latest revisions: [Deploy Github Pages With GPG Signing](https://blog.timerring.com/posts/deploy-github-pages-with-gpg-signing)
105 70
|
3天前
|
存储 数据挖掘 数据处理
Pandas高级数据处理:内存优化
Pandas 是流行的数据分析库,但随着数据量增加,内存使用问题日益突出。本文介绍常见内存优化问题及解决方案,包括选择合适数据类型(如 int8、float32)、使用 category 类型减少字符串内存开销、分块读取大文件避免 MemoryError 等。通过代码示例详细讲解如何优化内存使用,提高程序性能并避免错误。掌握这些技巧可显著提升 Pandas 数据处理效率。
86 58
|
3天前
|
监控 关系型数据库 MySQL
|
2天前
|
机器学习/深度学习 数据采集 监控
深度学习中模型训练的过拟合与欠拟合问题
在机器学习和深度学习中,过拟合和欠拟合是影响模型泛化能力的两大常见问题。过拟合指模型在训练数据上表现优异但在新数据上表现差,通常由模型复杂度过高、数据不足或质量差引起;欠拟合则指模型未能充分学习数据中的模式,导致训练和测试数据上的表现都不佳。解决这些问题需要通过调整模型结构、优化算法及数据处理方法来找到平衡点,如使用正则化、Dropout、早停法、数据增强等技术防止过拟合,增加模型复杂度和特征选择以避免欠拟合,从而提升模型的泛化性能。
|
2天前
|
存储 缓存 数据处理
Pandas高级数据处理:缓存与持久化
本文介绍 Pandas 中的缓存与持久化技术,涵盖其意义、常见方式及问题解决方案。缓存可提高效率、减少重复计算;持久化则优化资源使用。文中探讨内存缓存、文件系统和数据库持久化,并提供代码示例,如 LRU 缓存、Parquet 格式保存及 SQLite 数据库交互,帮助读者理解和应用这些技术。
109 73