Spring缓存是如何实现的?如何扩展使其支持过期删除功能?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 总之,Spring的缓存抽象提供了一种方便的方式来实现缓存功能,并且可以与各种缓存提供商集成以支持不同的过期策略。您可以根据项目的具体需求选择适合的方式来配置和扩展Spring缓存功能。

Spring框架提供了基于注解或XML配置的缓存抽象,用于在应用程序中实现缓存功能。Spring的缓存实现是基于缓存管理器(CacheManager)和缓存注解(@Cacheable@CachePut@CacheEvict)等组件的。

Spring缓存的工作原理:

  1. 在应用程序中使用 @Cacheable注解标记某个方法,表示该方法的结果需要被缓存。
  2. 当调用被标记的方法时,Spring首先会检查缓存,看是否已经存在方法的结果。如果存在,它将直接返回缓存的结果,而不执行方法。
  3. 如果缓存中不存在结果,方法会被执行,并且其结果将被存储在缓存中,以备后续使用。
  4. 使用 @CachePut注解可以强制方法执行,并将结果放入缓存中。
  5. 使用 @CacheEvict注解可以从缓存中移除特定的缓存项。

支持过期删除功能:

要使Spring缓存支持过期删除功能,可以采用以下方式:

  1. 使用带有过期时间的缓存配置

    • Spring缓存管理器通常支持配置缓存项的过期时间。您可以通过配置缓存管理器的方式来指定缓存项的过期策略。
  2. 自定义缓存管理器

    • 如果您需要更高级的过期策略,可以考虑自定义缓存管理器。您可以创建一个实现了 Cache接口的自定义缓存,然后在其中实现自定义的过期策略。
  3. 使用第三方缓存提供商

    • Spring支持与各种第三方缓存提供商集成,如Ehcache、Redis等。这些缓存提供商通常提供了丰富的过期策略配置选项,您可以根据需要进行配置。

例如,如果您使用Ehcache,可以在Ehcache配置文件中为缓存项指定过期时间:

<cache name="myCache" maxEntriesLocalHeap="100" timeToLiveSeconds="3600" />

这将使缓存项在1小时后过期。

总之,Spring的缓存抽象提供了一种方便的方式来实现缓存功能,并且可以与各种缓存提供商集成以支持不同的过期策略。您可以根据项目的具体需求选择适合的方式来配置和扩展Spring缓存功能。

目录
相关文章
|
2天前
|
缓存 NoSQL Java
Spring Cache之本地缓存注解@Cacheable,@CachePut,@CacheEvict使用
SpringCache不支持灵活的缓存时间和集群,适合数据量小的单机服务或对一致性要求不高的场景。`@EnableCaching`启用缓存。`@Cacheable`用于缓存方法返回值,`value`指定缓存名称,`key`定义缓存键,可按SpEL编写,`unless`决定是否不缓存空值。当在类上使用时,类内所有方法都支持缓存。`@CachePut`每次执行方法后都会更新缓存,而`@CacheEvict`用于清除缓存,支持按键清除或全部清除。Spring Cache结合Redis可支持集群环境。
26 5
|
11天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
21 2
|
11天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
42 5
|
11天前
|
Java API 数据安全/隐私保护
【亮剑】如何在Java项目中结合Spring框架实现邮件发送功能
【4月更文挑战第30天】本文介绍了如何在Java项目中结合Spring框架实现邮件发送功能。首先,需在`pom.xml`添加Spring和JavaMail依赖。然后,在`applicationContext.xml`配置邮件发送器,包括SMTP服务器信息。接着,创建一个使用依赖注入的`EmailService`类,通过`JavaMailSender`发送邮件。最后,调用`EmailService`的`sendSimpleEmail`方法即可发送邮件。最佳实践包括:使用配置管理敏感信息,利用`MimeMessage`构造复杂邮件,异常处理和日志记录,以及在大量发送时考虑使用邮件队列。
|
11天前
|
存储 缓存 Java
【Spring系列笔记】依赖注入,循环依赖以及三级缓存
依赖注入: 是指通过外部配置,将依赖关系注入到对象中。依赖注入有四种主要方式:构造器注入、setter方法注入、接口注入以及注解注入。其中注解注入在开发中最为常见,因为其使用便捷以及可维护性强;构造器注入为官方推荐,可注入不可变对象以及解决循环依赖问题。本文基于依赖注入方式引出循环依赖以及三层缓存的底层原理,以及代码的实现方式。
25 0
|
11天前
|
前端开发 Java Spring
Spring Framework五大功能模块
Spring Framework五大功能模块
|
11天前
|
缓存 NoSQL Java
缓存框架-Spring Cache的使用
Spring Cache是一个注解驱动的缓存框架,它提供了一层抽象,允许切换不同的缓存实现,如EHCache、Caffeine和Redis。启用缓存只需在配置中引入相关依赖并开启`@EnableCaching`。`@Cacheable`用于方法执行前检查缓存,存在则直接返回,不存在则执行方法并将结果存入缓存。`@CachePut`在方法执行后将结果放入缓存,常用于更新操作。`@CacheEvict`用于清除缓存数据,可以按key删除或清空整个缓存。`@Caching`可以组合多个缓存操作。在Redis中,可以通过序列化处理存储复杂对象,提高可读性。
66 4
|
4天前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Redis多线程
【5月更文挑战第21天】Redis启用多线程后,主线程负责接收事件和命令执行,IO线程处理读写数据。请求处理流程中,主线程接收客户端请求,IO线程读取并解析命令,主线程执行后写回响应。业界普遍认为,除非必要,否则不建议启用多线程模式,因单线程性能已能满足多数需求。公司实际场景中,启用多线程使QPS提升约50%,或选择使用Redis Cluster以提升性能和可用性。
9 0
|
5天前
|
NoSQL Redis 数据库
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Memcache + Redis 多线程
【5月更文挑战第20天】Redis采用单线程模式以避免上下文切换和资源竞争,简化调试,且其性能瓶颈在于网络IO和内存,而非多线程。相比之下,Memcache使用多线程能更好地利用多核CPU,但伴随上下文切换和锁管理的开销。尽管Redis单线程性能不俗,6.0版本引入多线程以提升高并发下的IO处理能力。启用多线程后,Redis结合Reactor和epoll实现并发处理,提高系统性能。
25 0
|
6天前
|
缓存 NoSQL 中间件
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?epoll、poll和select + Reactor模式
【5月更文挑战第19天】`epoll`、`poll`和`select`是Linux下多路复用IO的三种方式。`select`需要主动调用检查文件描述符,而`epoll`能实现回调,即使不调用`epoll_wait`也能处理就绪事件。`poll`与`select`类似,但支持更多文件描述符。面试时,重点讲解`epoll`的高效性和`Reactor`模式,该模式包括一个分发器和多个处理器,用于处理连接和读写事件。Redis采用单线程模型结合`epoll`的Reactor模式,确保高性能。在Redis 6.0后引入多线程,但基本原理保持不变。
24 2