Spring 抽象的缓存包 spring-cache

项目实战

用户信息查询接口中,使用@Cacheable注解

 绑定相关信息接口中,使用@CachePut更新用户信息到缓存

 

更新用户信息接口中,使用@CacheEvict删除缓存信息

使用步骤

 添加依赖,maven 坐标如下:

 使用 spring-cache 有三个步骤:

(1)在启动类上加入 @EnableCaching 注解;

(2)使用 CacheManager 初始化要使用的缓存框架,使用 @CacheConfig 注解注入要使用的资源(如果使用 RedisCacheManager,且只有一个初始化实例,这一步可省略);

(3)使用 @Cacheable 等注解对资源进行缓存。

 

 注解说明

从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持,Spring对Cache的支持也有基于注解和基于XML配置两种方式。Spring Cache作用在方法上,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。

Spring内置的三大注解缓存是:

@Cacheable:缓存,表示如果缓存系统里没有这个数值,就将方法的返回值缓存起来;

@CacheEvict:删除缓存,表示执行方法的时候,清除某些缓存值。

@CachePut:更新缓存。

@CachePut搭配@Cacheable的区别

@Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来;

@CachePut 的逻辑是:执行方法体 - 将结果缓存起来;

所以 @Cacheable 使用于查询数据的方法,@CachePut 使用于更新数据的方法。

@CachePut搭配@Cacheable使用

当需要根据请求改变值的时候,利用@CachePut将值改变并写入到缓存中,而@Cacheable标签除了第一次之外,一直是取的缓存的值。Cacheable一直读的缓存,实际数据已经改变了,那就不对了,就需要CachePut更新缓存值,那么Cacheable读的缓存值就对了

注意的点:

1、必须是同一个缓存实例。

2、key值必须是相同的。

好文

原理 -- https://blog.csdn.net/f641385712/article/details/94570960

https://blog.xinpapa.com/2019/07/24/cache/#cacheput

示例 -- https://www.cnblogs.com/coding-one/p/12403801.html

@CacheEvict 使用详解 -- https://www.cnblogs.com/coding-one/p/12408631.html

原文地址:https://www.cnblogs.com/liaowenhui/p/13619193.html