@Cacheable使用详解

news/2024/10/26 18:27:35/

@Cacheable使用详解

在软件开发中,性能优化是一个重要的方面。其中之一是减少不必要的计算或访问,以提高系统的响应速度和效率。缓存是一种常用的技术,用于存储和重用计算结果,从而避免重复计算。在许多编程语言和框架中,都提供了缓存机制来简化开发者的工作。

@Cacheable 是一种用于声明性缓存的注解,它在Spring框架中被广泛使用。通过使用 @Cacheable 注解,可以将方法的返回值缓存起来,以便在后续对该方法的调用中直接返回缓存的结果,而不必执行方法的实际逻辑。这样可以显著提高系统的性能和响应速度。

使用方式

以下是使用 @Cacheable 注解的详细步骤:

  1. 配置缓存管理器: 在Spring应用程序的配置文件中,需要配置一个缓存管理器。可以使用现有的缓存管理器,如Ehcache、Caffeine、Redis等,也可以自定义实现一个缓存管理器。

  2. 启用缓存支持: 在Spring配置文件中,需要启用缓存支持,以便Spring能够识别和处理缓存注解。可以通过在配置类上添加 @EnableCaching 注解来实现。

  3. 在方法上添加 @Cacheable 注解: 在需要进行缓存的方法上,添加 @Cacheable 注解,并指定缓存的名称、缓存的键值等参数。例如:

@Cacheable(value = "myCache", key = "#param")
public String getData(String param) {// 方法的实际逻辑// ...return result;
}

在上述示例中,@Cacheable 注解指定了一个名为 “myCache” 的缓存,方法的参数 param 被用作缓存的键值。

  1. 调用缓存的方法: 在应用程序的其他部分中调用被缓存的方法时,Spring会首先检查缓存中是否存在对应的结果。如果缓存中有结果,则直接返回缓存的值,而不执行方法的实际逻辑。如果缓存中没有结果,则执行方法的逻辑,并将结果存储到缓存中。

缓存注解参数解释

@Cacheable 注解提供了一些参数,用于配置缓存的行为。下面是一些常用的参数:

  • value:指定缓存的名称,用于区分不同的缓存。可以在缓存管理器的配置中指定相应的缓存。
  • key:指定缓存的键值,用于存储和检索缓存的结果。可以使用Spring表达式来定义键值,例如 key = "#param" 表示使用方法的参数 param 作为键值。
  • condition:指定一个SpEL表达式,用于在方法执行前判断是否应该进行缓存。如果表达式的结果为false,则不会执行缓存操作。
  • unless:指定一个SpEL表达式,用于在方法执行后判断是否应该缓存结果。如果表达式的结果为true,则不会将方法的返回值缓存起来。
  • keyGenerator:指定一个自定义的键生成器,用于生成缓存的键值。可以实现KeyGenerator接口来自定义键生成器。
  • cacheManager:指定使用的缓存管理器。可以在缓存管理器的配置中指定相应的缓存管理器。
  • cacheResolver:指定一个自定义的缓存解析器,用于根据缓存的名称解析缓存。可以实现CacheResolver接口来自定义缓存解析器。
  • sync:指定是否使用同步模式。默认情况下,缓存的方法是异步执行的,即先返回缓存的结果,然后在后台执行方法的实际逻辑并更新缓存。如果将 sync 设置为 true,则方法将以同步方式执行,直到方法执行完成并更新缓存后才返回结果。

示例

下面是一个示例,展示了如何使用 @Cacheable 注解:

@Service
public class DataService {@Cacheable(value = "myCache", key = "#param")public String getData(String param) {// 模拟耗时操作try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}// 实际的数据获取逻辑String result = fetchDataFromDatabase(param);return result;}private String fetchDataFromDatabase(String param) {// 从数据库中获取数据的逻辑// ...return "Data for param: " + param;}
}

在上述示例中,DataService 类中的 getData 方法被标记为 @Cacheable,使用了名为 “myCache” 的缓存,并以方法的参数 param 作为缓存的键值。当调用 getData 方法时,如果缓存中已经存在以 param 为键的结果,将直接返回缓存的值。否则,将执行方法的实际逻辑,并将结果存储到缓存中。

通过使用 @Cacheable 注解,可以有效地减少方法的执行次数,并提高系统的性能和响应速度。

希望这份博客对你理解和使用 @Cacheable 注解有所帮助!


http://www.ppmy.cn/news/74890.html

相关文章

【java】java关键字

文章目录 一、Java中的关键字有哪些?二、Java的关键字(keyword)有多少个?三、Java的保留字(reserve word)有多少个?分别是什么?四、Java的关键字分别是什么,作用是什么?4.1 访问修饰…

抓取微信小程序源码教程,扒微信小程序文件等

前言: 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能。这里用到了2个工具《包解密》与《反编译》(非原创,均来自网上的大佬),特别适合新手…

图片模块封装:Glide高级使用+使用设计模式图片框架封装+Bitmap尺寸压缩和质量压缩+Bitmap加载大图长图

图片模块封装:Glide高级使用使用设计模式图片封装Bitmap尺寸压缩和质量压缩Bitmap加载大图长图 一.如何更换图片框架二.策略模式构建者模式图片框架搭建1.ImageOptions图片参数设置2.IImageLoader接口以及实现子类3.图片加载策略4.ImageLoaderManager6.业务模块中使…

在ubuntu20.x上修改mysql密码

1,在安装mysql后测试mysql是否安装成功可链接数据测试输入一下命令命令都在终端中输入 mysql -u root -p 提示输入密码错误 输入命令后需要输入数据库密码,如忘记密码可进行数据库密码的修改 2,sudo cat /etc/mysql/debian.cnf 输入命令后…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 6 Frequent Itemsets

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 6 Frequent Itemsets The market-basket model of data is used to describe a common form of many-many relationship between two kinds of objects. On the one hand, we have items, and on…

使用Python和Scrapy实现抓取网站数据

Scrapy是一个功能强大的网络爬虫框架,允许开发者轻松地抓取和解析网站内容,这篇文章主要为大家介绍了如何使用Python的Scrapy库进行网站数据抓取,需要的可以参考一下 在本文中,我们将介绍如何使用Python的Scrapy库进行网站数据抓…

linux0.12-10-1-总体功能

第10章 字符设备驱动程序 [466页] 10-1 总体功能 本章的程序可分成三部分: 第一部分是是关于RS-232串行线路驱动程序,包括程序rs_io.s和serial.c; 第二部分是涉及控制台的驱动程序,包括键盘中断驱动程序keyboard.S和控制台显示驱动程序con…

如今的Android就业率惨不忍睹~

3月底公司大裁员,投了一个月简历,一天投个几十份简历,而收到面试通知的就那么三四家,要么就是薪水给得很低不想去,要么就是高薪水的Offer拿不下,而自己中意公司的却没有给出回应,唉……真难啊!&…