广告
返回顶部
首页 > 资讯 > 精选 >如何使用@CacheEvict清除指定下所有缓存
  • 581
分享到

如何使用@CacheEvict清除指定下所有缓存

2023-06-22 04:06:42 581人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关如何使用@CacheEvict清除指定下所有缓存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。@CacheEvict清除指定下所有缓存@CacheEvict(ca

这篇文章将为大家详细讲解有关如何使用@CacheEvict清除指定下所有缓存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

@CacheEvict清除指定下所有缓存

@CacheEvict(cacheNames = "parts:grid",allEntries = true)

此注解会清除part:grid下所有缓存

@CacheEvict要求指定一个或多个缓存,使之都受影响。此外,还提供了一个额外的参数allEntries 。表示是否需要清除缓存中的所有元素。默认为false,表示不需要。

当指定了allEntries为true时,spring Cache将忽略指定的key。有的时候我们需要Cache一下清除所有的元素。

@Cacheable 缓存 @CachePut:缓存更新 @CacheEvict:缓存删除

@Cacheable 缓存

说明:在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。

// @since 3.1  可以标注在方法上、类上  下同@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Cacheable {    // 缓存名称  可以写多个,key的真正组成,以cacheName为前缀,多个就会有多个key产生    @AliasFor("cacheNames")    String[] value() default {};    @AliasFor("value")    String[] cacheNames() default {};    // 支持写SpEL,切可以使用#root,#参数名”或者“#p参数index”    //详情去 https://blog.csdn.net/dalong_bamboo/article/details/103844076    String key() default "";    // Mutually exclusive:它和key属性互相排斥。请只使用一个,直接写bean的名字就可以    String keyGenerator() default "";   //用于选择使用哪个cacheManager    String cacheManager() default "";    //用户定义如何处理缓存,实现 org.springframework.cache.interceptor.CacheResolver接口    String cacheResolver() default "";    // 表示在哪种情况下才缓存结果,可使用SpEL,可以使用#root。  只有true时,才会作用在这个方法上    String condition() default "";    // 表示在哪种情况下不缓存结果,可以写SpEL #root,并且可以使用#result拿到方法返回值    经典值#result == null    String unless() default "";        // true:表示强制同步执行。(若多个线程试图为**同一个键**加载值,以同步的方式来进行目标方法的调用)    // 同步的好处是:后一个线程会读取到前一个缓存的缓存数据,不用再查库了~~~     // 默认是false,不开启同步one by one的    // @since 4.3  注意是sync而不是Async    // 它的解析依赖于Spring4.3提供的Cache.get(Object key, Callable<T> valueLoader);方法    boolean sync() default false;}

@CachePut:缓存更新

说明:@CachePut也可以声明一个方法支持缓存功能。

与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Cacheable { @AliasFor("cacheNames") String[] value() default {}; @AliasFor("value") String[] cacheNames() default {}; // 注意:它和上面区别是。此处key它还能使用#result String key() default ""; String keyGenerator() default ""; String cacheManager() default ""; String cacheResolver() default ""; String condition() default ""; String unless() default "";}

@CacheEvict:缓存删除

说明:@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。

即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件。

下面我们来介绍一下新出现的两个属性allEntries和beforeInvocation。

allEntries属性,allEntries是boolean类型,表示是否需要清除缓存中的所有元素。

默认为false,表示不需要。当指定了allEntries为true时,Spring Cache将忽略指定的key。

有的时候我们需要Cache一下清除所有的元素,这比一个一个清除元素更有效率。

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Cacheable { @AliasFor("cacheNames") String[] value() default {}; @AliasFor("value") String[] cacheNames() default {}; // 它也能使用#result String key() default ""; String keyGenerator() default ""; String cacheManager() default ""; String cacheResolver() default ""; String condition() default ""; // 是否把上面cacheNames指定的所有的缓存都清除掉,默认false boolean allEntries() default false; // 是否让清理缓存动作在目标方法之前执行,默认是false(在目标方法之后执行) // 注意:若在之后执行的话,目标方法一旦抛出异常了,那缓存就清理不掉了~~~~ boolean beforeInvocation() default false;}

关于如何使用@CacheEvict清除指定下所有缓存就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何使用@CacheEvict清除指定下所有缓存

本文链接: https://www.lsjlt.com/news/302715.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用@CacheEvict清除指定下所有缓存
    目录@CacheEvict清除指定下所有缓存@Cacheable 缓存 @CachePut:缓存更新 @CacheEvict:缓存删除@Cacheable 缓存@CachePut:缓...
    99+
    2022-11-12
  • 如何使用@CacheEvict清除指定下所有缓存
    这篇文章将为大家详细讲解有关如何使用@CacheEvict清除指定下所有缓存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。@CacheEvict清除指定下所有缓存@CacheEvict(ca...
    99+
    2023-06-22
  • vue如何使用keep-alive后清除缓存
    小编给大家分享一下vue如何使用keep-alive后清除缓存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是keepalive在平常开发中,有部分组件没有必...
    99+
    2023-06-20
  • 如何使用批处理去除指定字符前所有的0
    这篇文章将为大家详细讲解有关如何使用批处理去除指定字符前所有的0,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如文本1.txt: 代码: 0000acb0h 0b0c00a000s 0000h00ga00...
    99+
    2023-06-08
  • Oracle如何清除一个用户下的所有表(谨慎操作!)
    执行该操作要慎重,不然可能会造成很严重的后果! 使用工具: plsql developeroracle 数据库 前段时间部署程序的时候导入数据有问题,需要重新导入。然后保险起见把原来的表全部删掉之后再...
    99+
    2023-03-09
    oracle删除用户下的所有表 oracle清除数据库用户命令 oracle数据库删除表
  • 如何使用 Bash 重定向快速清理 Go 缓存?
    Go 语言是一种开源的编程语言,由 Google 开发。它具有快速编译和高效执行的特点,因此受到了许多开发人员的青睐。但是,当你在编写 Go 代码时,你可能会遇到缓存的问题。这些缓存文件占用了你的磁盘空间,并且可能会导致一些不必要的问题。...
    99+
    2023-08-28
    缓存 重定向 bash
  • Fedora如何使用Yum命令查询软件包及清除缓存
    这篇文章主要为大家展示了“Fedora如何使用Yum命令查询软件包及清除缓存”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Fedora如何使用Yum命令查询软件包及清除缓存”这篇文章吧。Redh...
    99+
    2023-06-16
  • Python代码集pathlib应用之如何获取指定目录下的所有文件
    (1)如下代码,默认递归获取指定目录root_dir下的所有文件,当指定recursive参数为False时,则只获取root_dir目录下的所有文件,不会递归的查找,若指定suffix_tuple参数,则可以获取root_dir目录下的指...
    99+
    2023-05-14
    Python pathlib
  • 如何使用bat自动删除指定文件夹下前几天的文件
    小编给大家分享一下如何使用bat自动删除指定文件夹下前几天的文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:@echo off s...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作