Spring Framework支持向应用程序添加缓存。核心用法是将缓存应用于方法,从而减少了基于缓存中可用信息的调用方法执行次数。架构启用缓存对应用零改动,对调用程序也没有任何干扰。只要在主应用添加@EnableCaching注释,Spring Boot就会自动给应用添加缓存基础架构支持。具体流程和测试用例如下:
1、springboot主应用添加@EnableCaching注释;
2、在被缓存的方法增加@Cacheable("passwordRetryCache")注解;
3、连续两次调用测试,通过控制台,可以看到第一次调用进入方法执行代码,第二次缓存启用,没有进入代码执行。
第一次调用,执行方法体,并且缓存监听器可以看到缓存的信息
date=2020-1-23
---执行代码----
2024-06-07 17:45:45.854 INFO 49388 --- [nio-8080-exec-1] c.x.b.cache.XdCacheEventListener : cache put. ehcacheName=passwordRetryCache, key = 2020-1-23, value = 20200123
yyyyMMdd=20200123
第二次调用,没有进入方法体,只是返回值。
date=2020-1-23
yyyyMMdd=20200123
4、如果不指定缓存类型和缓存库的话,Spring Boot会自动创建默认的缓存提供程序并根据缓存名字自动创建缓存(我们也可以直接通过spring.cache.cache-names=passwordRetryCache 定义我们缓存),这种情况一般是我们测试使用,生成环境建议显示配置缓存类型。这里我们以Ehcahce为例,如果在类路径的根目录中定义了默认ehcache.xml文件,则应用会自动找到文件并使用Ehcache缓存,如果使用文件名非默认文件名,则需要显示指定文件路径 spring.cache.ehcache.config=classpath:config/another-config.xml。
5、如果有些时候,我们想禁用我们启用的缓存,可通过如下参数配置:
spring.cache.type=none
6、注意事项:
1)缓存的方法基本是按照参数和方法唯一标识,即指定的参数必须返回指定的唯一值,如果我们用同一参数调用方法,返回值不一样,则不能使用缓存,否则影响你的业务逻辑判断;
如以下例子,按道理返回的值是按照随机值返回的,但是第一次缓存后,后续调用返回的都是第一次返回的值:
2)缓存的方法的最好是同一参数调用次数频繁,多次调用,如果每次调用参数都不一样,那缓存的意义也不大。