春季基于注解的缓存
对于缓存声明,春天的缓存提供了一组java注解:
@Cacheable:触发缓存写入.@CacheEvict:触发缓存清除。
br/> @CacheEvict:触发缓存清除。
br/> @Caching:重新组合要应用于方法的多个缓存操作。
@Cacheable注解
顾名思义,@Cacheable可以用来进行缓存的写入,将结果存储在缓存中,以便于在后续调用的时候可以直接返回缓存中的值,而不必再执行实际的方法。最简单的使用方式,注解名称=缓存名称,使用例子如下:
<代码> @Cacheable(“书”) 公共图书findBook (ISBN ISBN){…} 代码>
个方法可以对应两个缓存名称,如下:
<代码> @Cacheable({“书”,“isbn”}) 公共图书findBook (ISBN ISBN) {…}代码>
@Cacheable的缓存名称是可以配置动态参数的,比如选择传入的参数,如下:(以下示例是使用?声明,如果您不熟悉?,可以阅读Spring表达式语言)
<代码> @Cacheable (cacheNames=笆椤?关键=" # isbn ") 公共图书findBook (ISBN ISBN,布尔checkWarehouse,布尔includeUsed) @Cacheable (cacheNames=笆椤?关键=" # isbn.rawNumber ") 公共图书findBook (ISBN ISBN,布尔checkWarehouse,布尔includeUsed) @Cacheable (cacheNames="书",关键=癟 (someType) .hash (# isbn)”) 公共图书findBook (ISBN ISBN,布尔checkWarehouse,布尔includeUsed) 代码>
@Cacheable还可以设置根据条件判断是否需要缓存
条件:取决于给定的参数是否满足条件
除非:取决于返回值是否满足条件
以下是一个简单的例子:
@Cacheable (cacheNames=癰ook"条件=? name.length () & lt;32“)
公共图书findBook(字符串名称)
<代码> @Cacheable (cacheNames=笆椤?条件=" # name.length () & lt;32”,除非=" # result.hardback”) 公共图书findBook(字符串名称) @Cacheable还可以设置:keyGenerator(指定关键自动生成方法),缓存管理器(指定使用的缓存管理),cacheResolver(指定使用缓存的解析器)等,这些参数比较适合全局设置,这里就不多做介绍了。代码>
@CachePut注解
@CachePut:当需要更新缓存而不干扰方法的运行时,可以使用该注解。也就是说,始终执行该方法,并将结果放入缓存,注解参数与@Cacheable相同。以下是一个简单的例子:
<代码> @CachePut (cacheNames=笆椤?关键=" # isbn ") 公共图书updateBook (ISBN ISBN BookDescriptor描述符)代码>
通常强烈建议不要对同一方法同时使用@CachePut和@Cacheable注解,因为它们具有不同的行为。可能会产生不可思议的错误哦。
@CacheEvict注解
@CacheEvict:删除缓存的注解,这对删除旧的数据和无用的数据是非常有用的。这里还多了一个参数(allEntries),设置allEntries=true时,可以对整个条目进行批量删除。以下是个简单的例子:
<代码> @CacheEvict (cacheNames=笆椤? 公共空间loadBooks (InputStream批)//对cacheNames进行批量删除 @CacheEvict (cacheNames=笆椤?allEntries=true) 公共空loadBooks (InputStream批)代码>
@Caching注解
@Caching:在使用缓存的时候,有可能会同时进行更新和删除,会出现同时使用多个注解的情况。而@Caching可以实现。以下是个简单的例子:
<代码> @Caching(驱逐={@CacheEvict(“主”),@CacheEvict (cacheNames=按我?关键=# p0)}) 公共图书importBooks(字符串,日期日期)代码>
@CacheConfig注解
@CacheConfig:缓存提供了许多的注解选项,但是有一些公用的操作,我们可以使用@CacheConfig在类上进行全局设置。以下是个简单的例子:
<代码> @CacheConfig(“书”) 公共类BookRepositoryImpl实现BookRepository { @Cacheable 公共图书findBook (ISBN ISBN) {…} }代码>
可以共享缓存名称,统一配置KeyGenerator,缓存管理器,CacheResolver。
实例
来看看我们在springboot中怎么使用复述来作为缓存吧。
为春天缓存配置复述,作为缓存
1。在pom.xml引入复述,依赖
<代码> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-data-redis & lt;/dependency>代码>springboot整合弹簧@Cache和复述