webflux使用caffeine cache(webflux详解)

webflux使用caffeine cache(webflux详解)toc 本文主要是为了个人练习 spring 的缓存注解 Cacheable CachePut CacheEvict Caching CacheConfig 以及总结个人在使用过程中发现的疑惑点 以及如何解决等思路 另外该文章不会写的特别繁琐 复杂 如果具体想查看某个注解的详细使用方式请单个注解去 CSDN 查询即可 我这边只是为了个人总结 言简意赅那种 Cacheable 主要用于 查询 功能 CachePut 主要用于 修改 功能 CacheEvict 主要用于



@toc

本文主要是为了个人练习spring的缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】,以及总结个人在使用过程中发现的疑惑点,以及如何解决等思路,另外该文章不会写的特别繁琐、复杂,如果具体想查看某个注解的详细使用方式请单个注解去CSDN查询即可,我这边只是为了个人总结,言简意赅那种。

@Cacheable:主要用于 “查询” 功能 @CachePut:主要用于 “修改” 功能 @CacheEvict:主要用于 “删除” 功能

优点:spring本地缓存注解使用起来很方便,配置也很简单,上手容易。

缺点:使用场景有局限,不能用于分布式环境,因为注解缓存实际是缓存服务器本地内存中的,如果项目是集群部署,那么就需要本地缓存3份一模一样的,实际真犯不上这样干,费时费力费资源。即:单机环境推荐使用本地缓存注解,集群环境建议使用redis等缓存技术。

在 @Cacheable 注解的使用中,共有 9 个属性供我们来使用,这 9 个属性分别是:<font color='red'> value、 cacheNames、 key、 keyGenerator、 cacheManager、 cacheResolver、 condition、 unless、 sync。</font>接下来我们就分别来介绍一下它的使用。

1.value/cacheNames 属性

如下图所示,这两个属性代表的意义相同,根据<font color='red'>@AliasFor</font>注解就能看出来了。<font color='red'>这两个属性都是用来指定缓存组件的名称,即将方法的返回结果放在哪个缓存中,属性定义为数组,可以指定多个缓存;</font>

2.key属性

可以通过 key 属性来指定缓存数据所使用的的 key,默认使用的是方法调用传过来的参数作为 key。<font color='red'>最终缓存中存储的内容格式为:Entry<key,value> 形式。</font>

key值的编写,可以使用 SpEL 表达式的方式来编写;除此之外,我们同样可以使用 <font color='red'>keyGenerator </font>

生成器的方式来指定 key,我们只需要编写一个 keyGenerator ,将该生成器注册到 IOC 容器即可。<font color='red'>(keyGenerator的使用,继续往下看)</font>

使用示例如下:

3.keyGenerator 属性

key 的生成器。如果觉得通过参数的方式来指定比较麻烦,我们可以自己指定 key 的生成器的组件 id。<font color='red'>key/keyGenerator属性:二选一使用。</font>我们可以通过自定义配置类方式,将 keyGenerator 注册到 IOC 容器来使用。

4.cacheManager 属性

<font color='red'> 该属性,用来指定缓存管理器。</font>针对不同的缓存技术,需要实现不同的 cacheManager,Spring 也为我们定义了如下的一些 cacheManger 实现()

5.cacheResolver 属性

<font color='red'>该属性,用来指定缓存解析器。</font>使用配置同 cacheManager 类似,可自行百度。(cacheManager指定管理器/cacheResolver指定解析器 它俩也是二选一使用)

6.condition 属性

条件判断属性,用来指定符合指定的条件下才可以缓存。也可以通过 SpEL 表达式进行设置。这个配置规则和上面表格中的配置规则是相同的。

7.unless 属性

unless属性,意为"除非"的意思。即只有 unless 指定的条件为 true 时,方法的返回值才不会被缓存。可以在获取到结果后进行判断。

8.sync 属性

该属性用来指定<font color='red'>是否使用异步模式,</font>该属性默认值为 false,默认为同步模式。<font color='red'>异步模式指定 sync = true 即可,异步模式下 unless 属性不可用。</font>

@CachePut 也可以声明一个方法支持缓存功能。 与 @Cacheable 不同的是使用 @CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。 使用@CachePut 可以指定的属性跟 @Cacheable 是一样的, @CachePut 适用于缓存更新。

@CacheEvict 是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。 @CacheEvict支持的属性额外增加了两个: 1、allEntries:是否需要清除缓存中的所有元素。默认为 false ,表示不需要。当指定了 allEntries 为 true 时,Spring Cache将忽略指定的key,删除缓存中所有键;

2、beforeInvocation: 是否在方法执行成功之后触发键删除操作,默认是在对应方法成功执行之后触发的,若此时方法抛出异常而未能成功返回,不会触发清除操作。指定该属性值为 true 时,Spring会在调用该方法之前清除缓存中的指定元素。

@Caching 注解可以在一个方法或者类上同时指定多个Spring Cache相关的注解。 其拥有三个属性:cacheable、put 和 evict,分别用于指定@Cacheable、@CachePut 和 @CacheEvict。对于一个数据变动,更新多个缓存的场景,可以通过 @Caching 来实现:

<font color='red'>上面这个就是组合操作:从 caching::#age 缓存取数据,不存在时执行方法并写入缓存;删除缓存 t4::#age。</font>

如果一个类中,多个方法都有同样的 cacheName,keyGenerator,cacheManager 和 cacheResolver,可以直接使用 @CacheConfig 注解在类上声明,这个类中的方法都会使用@CacheConfig 属性设置的相关配置。

1.Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项

2.使用Spring本地缓存注解 练习【增删改查案例】时发现的问题,以及解决方案

编程小号
上一篇 2025-01-24 19:40
下一篇 2025-01-27 16:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/50340.html