共计 3096 个字符,预计需要花费 8 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章给大家分享的是有关 spring redis 注解如何实现缓存机制的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考。一起跟随丸趣 TV 小编过来看看吧。
1、xml 配置
bean id= poolConfigTax >2、缓存注解 @Cacheable、@CacheEvict、@CachePut 详解
一、@Cacheable 用法详解
1、用在哪里?用在方法或者类上。
2、这两种用法有什么区别?
用在方法上表示:该方法的返回值将被缓存起来
用在类上表示:表示该类的所有方法都支持该注解
3、使用后的结果是什么?下次使用相同方法和相同参数调用这个方法的时候将直接从缓存取值,而不需要再次执行该方法。
4、返回值在缓存中怎么存储的?以键值对的方式存储在缓存中,value 就是返回值,key 由两种策略生成:默认策略和自定义策略
5、默认策略和默认策略怎么用?
默认策略:在 value 值后双“::”拼接,形参列表,当形参是对象时,使用 json 格式:
@CacheConfig(cacheNames= enterprise)// !-- 声明缓存使用的缓存名称 --
public interface EnterpriseRepo extends JpaRepository Enterprise, Integer ,JpaSpecificationExecutor Enterprise {@Cacheable(value= cash2)
Enterprise findByid(Integer id);
@CachePut(value= cash2)
Enterprise save(Enterprise enterprise);
}
自定义策略:key 属性是用来指定 Spring 缓存方法的返回结果时对应的 key 的。该属性支持 SpringEL 表达式。当我们没有指定该属性时,Spring 将使用默认策略生成 key。
自定义策略是指我们可以通过 Spring 的 EL 表达式来指定我们的 key。这里的 EL 表达式可以使用方法参数及它们对应的属性。使用方法参数时我们可以直接使用“# 参数名”或者“#p 参数 index”。下面是几个使用参数作为 key 的示例。
@Cacheable(value= users , key= #id)
public User find(Integer id) {
return null;
@Cacheable(value= users , key= #p0)
public User find(Integer id) {
return null;
@Cacheable(value= users , key= #user.id)
public User find(User user) {
return null;
@Cacheable(value= users , key= #p0.id)
public User find(User user) {return null;}
除了上述使用方法参数作为 key 之外,Spring 还为我们提供了一个 root 对象可以用来生成 key。通过该 root 对象我们可以获取到以下信息。
当我们要使用 root 对象的属性作为 key 时我们也可以将“#root”省略,因为 Spring 默认使用的就是 root 对象的属性。如:
@Cacheable(value={ users , xxx}, key= caches[1].name )
public User find(User user) {return null;}
6、condition 属性指定发生的条件
有的时候我们可能并不希望缓存一个方法所有的返回结果。通过 condition 属性可以实现这一功能。condition 属性默认为空,表示将缓存所有的调用情形。其值是通过 SpringEL 表达式来指定的,当为 true 时表示进行缓存处理;当为 false 时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次。如下示例表示只有当 user 的 id 为偶数时才会进行缓存。
@Cacheable(value={ users}, key= #user.id , condition= #user.id%2==0 )
public User find(User user) {System.out.println( find user by user + user);
return user;
}
二、@CachePut
在支持 Spring Cache 的环境下,对于使用 @Cacheable 标注的方法,Spring 在每次执行前都会检查 Cache 中是否存在相同 key 的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。@CachePut 也可以声明一个方法支持缓存功能。与 @Cacheable 不同的是使用 @CachePut 标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
一般使用在保存,更新方法中。
@CachePut 也可以标注在类上和方法上。使用 @CachePut 时我们可以指定的属性跟 @Cacheable 是一样的。
@CachePut(“users”)// 每次都会执行方法,并将结果存入指定的缓存中
public User find(Integer id) {return null;}
三、@CacheEvict
@CacheEvict 是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict 可以指定的属性有 value、key、condition、allEntries 和 beforeInvocation。其中 value、key 和 condition 的语义与 @Cacheable 对应的属性类似。即 value 表示清除操作是发生在哪些 Cache 上的(对应 Cache 的名称);key 表示需要清除的是哪个 key,如未指定则会使用默认策略生成的 key;condition 表示清除操作发生的条件。下面我们来介绍一下新出现的两个属性 allEntries 和 beforeInvocation。
1、allEntries 属性
allEntries 是 boolean 类型,表示是否需要清除缓存中的所有元素。默认为 false,表示不需要。当指定了 allEntries 为 true 时,Spring Cache 将忽略指定的 key。有的时候我们需要 Cache 一下清除所有的元素,这比一个一个清除元素更有效率。
@CacheEvict(value= users , allEntries=true)
public void delete(Integer id) {System.out.println( delete user by id: + id);
}
2、beforeInvocation 属性
清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用 beforeInvocation 可以改变触发清除操作的时间,当我们指定该属性值为 true 时,Spring 会在调用该方法之前清除缓存中的指定元素。
@CacheEvict(value= users , beforeInvocation=true)
public void delete(Integer id) {System.out.println( delete user by id: + id);
}
感谢各位的阅读!关于 spring redis 注解如何实现缓存机制就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
向 AI 问一下细节
丸趣 TV 网 - 提供最优质的资源集合!