ehcache缓存过期时间和注解的使用。

2023-11-15

一、过期时间的测试:

    我们配置一个spring整合ehcache的例子,使用自动注解缓存的方式,进行测试。timeToIdleSeconds表示最大空闲的时间,timeToLiveSeconds表示最大存活时间。

   例1结果:5秒间隔内不过期,超过10秒一定过期,就不测试了,占用篇幅!备注:缓存的过期是访问后才过期!

 <cache name="cacheTest1"
        maxElementsInMemory="1000"
        eternal="false"
        overflowToDisk="false"
        timeToIdleSeconds="5"
        timeToLiveSeconds="10"/>

   例2 最大闲置5秒,最大存活0。结论:当存活时间不设置(0默认),只要闲置时间内访问,可以无限存活。

        
    <cache name="cacheTest2"
        maxElementsInMemory="1000"
        eternal="false"
        overflowToDisk="false"
        timeToIdleSeconds="5"
        timeToLiveSeconds="0"/>
    
    /**
     * 时间的测试2
     * unless="#result!=null; 表示返回null的值不缓存
     */
    @Cacheable(value="cacheTest2",key="#param",unless="#result==null")
    public String getTime2(String param) {
        Long time = System.currentTimeMillis();
        return time.toString();
    }
    
    /**时间2的清除*/
    @CacheEvict(value="cacheTest2",key="#param")
    public void clearTime2(String param){
    }
    

测试结果:

	/**
	 *  2.ehcache配置,闲置5秒,存活0秒
	 */
	@Test
	public void test2() throws InterruptedException{
		MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class);
		String time3 = bean.getTime2("shijian");
		System.out.println(time3);
		Thread.sleep(4000);
		String time4 = bean.getTime2("shijian");
		System.out.println(time4);//4秒时间,缓存不变
		Thread.sleep(4000);
		String time5 = bean.getTime2("shijian");
		System.out.println(time5);//4+4秒时间,缓存不变
		Thread.sleep(4000);
		bean.clearTime2("shijian");
		String time6 = bean.getTime2("shijian");
		System.out.println(time6);//4+4+4秒时间,如果不清除缓存不变,但是被清除了,会变
	}

  例3:我们知道当设置了存活时间,存活时间到了一定过期,那么假如把闲置时间设置0呢?

<cache name="cacheTest22" maxElementsInMemory="1000" eternal="false"
		overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="5" />
	/**
	 *  2.ehcache配置,闲置时间0秒,存活5秒
	 */
	@Test
	public void test22() throws InterruptedException{
		MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class);
		String time1 = bean.getTime22("shijian");
		System.out.println(time1);
		Thread.sleep(4000);
		String time2 = bean.getTime22("shijian"); //不变
		System.out.println(time2);
		Thread.sleep(4000);
		String time3 = bean.getTime22("shijian"); //变
		System.out.println(time3);
	}

结论:1、2个时间都不为0,那么只要到过期时间必定过期,否则看是否闲置时间内。

          2、如果存活时间为0,代表永久存活。即只要看在闲置时间间隔内访问即可。

          3、如果闲置时间为0,可以想成代表永久活跃,基本就没意义了,只要看存活时间到期即可。

          4、2个参数,一个为0,只看另外一个。2个都不为0,2个条件都要满足!【只看此条】

二、ehcache在整合到spring中的几个注解

         @Cacheable(value="cacheTest1",key="#param")  //请求后会缓存,查询用,value是配置的cache名,key就表示key

         @CacheEvict(value="cacheTest2",key="#param") //请求后会删除。删除用!

         @CachePut(value="cacheTest3",unless="#result==null")//请求后方法肯定执行,并且存缓存,更新用! unless除了结果不等于空。(#result 代表返回结果)

 问题1、那么不设置key,默认的key是什么?  答案:是一个空数组

	@Test
	public void test0(){
		MyEhcacheAutoService bean = context.getBean(MyEhcacheAutoService.class);
		bean.getTime0();
		List<Element> all = EhcacheUtil.getAll("cacheTest0");//备注:此Util是用API操作,它可以和注解互通。
		for (int i = 0; i < all.size(); i++) {
			Object objectKey = all.get(i).getObjectKey();
			System.out.println(objectKey);   //SimpleKey []         
		}
	}

问题2、key有那些?

      常用的key的形式:#xxx  方法参数名。(如果是对象,可以xxx.id的形式)

                                  #root.target  实例对象

                                  #root.methodName  方法名称

问题3、如何拼接几个参数?  (采用单引号的拼接形式)

    /**
     * 时间的测试3
     */
    @Cacheable(value="cacheTest3",key="#param1+'_'+#param2",unless="#result==null")
    public String getTime3(String param1,String param2) {
        Long time = System.currentTimeMillis();
        return time.toString();
    }

其他:一个参数做key不能为空。但是拼接时,只要有1个不为空即可做为key。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ehcache缓存过期时间和注解的使用。 的相关文章

随机推荐

  • RuntimeError: a leaf Variable that requires grad has been used in an in-place operation.a += torch.o

    叶子节点不能执行in place 原地 操作 因为在进行前向传播的时候得到的是叶子结点的地址 再进行反向传播的时候这个地址不变才不会报错 地址改变了就会出错 要将 a torch ones 1 改为 a a torch ones 1 另外下
  • 计算机断电无法启动不了系统,电脑突然断电后无法启动怎么回事

    使用电脑的时候 总是会避免不了各种意外的事情 比如常见的电脑突然断电的情况 然后就会关机 可是关机之后就无法开机了 这是怎么回事呢 那么遇到电脑突然断电后无法启动如何解决呢 不用担心 本文给大家讲述一下电脑断电关机后无法开机的详细修复步骤
  • 用c语言实现顺序查找,顺序查找算法及C语言实现

    通过前面对静态查找表的介绍 静态查找表即为只做查找操作的查找表 静态查找表既可以使用 虽然一个是本节以静态查找表的顺序存储结构为例做详细的介绍 顺序查找的实现 静态查找表用顺序存储结构表示时 顺序查找的查找过程为 从表中的最后一个数据元素开
  • Java实现哈希函数/散列算法

    哈希函数 散列算法 根据某个值进行hash值计算 确保唯一性 public class HashUtils private static final String ALGORITHM SHA 256 public static String
  • Java基本类型所占存储空间大小

    基本类型 大小 最小值 最大值 包装器类型 boolean Boolean char 两个字节 Unicode 0 Unicode 2 16 1 Character byte 一个字节 128 127 Byte short 两个字节 2 1
  • daily technology

    Trending repositories on GitHub today GitHub The Hacker News Cybersecurity News and Analysis HackerNews Pxlet Yet anothe
  • 四数之和——python

    18 四数之和 难度中等997 给你一个由 n 个整数组成的数组 nums 和一个目标值 target 请你找出并返回满足下述全部条件且不重复的四元组 nums a nums b nums c nums d 若两个四元组元素一一对应 则认为
  • 学习使用 MATLAB 数学建模一篇文章就够了

    学习中 随着学习的深入会不断补充内容 欢迎大家一起学习数学建模知识 有什么问题 大家可以评论 一起讨论学习 需要LaTeX 数学建模模板和我收集的一些数学建模资料的可以评论留下邮箱 与君共勉 文章目录 一 MATLAB 知识学习 二 数学建
  • 剖析高性能队列Disruptor背后的数据结构和算法

    本文是学习算法的笔记 数据结构与算法之美 极客时间的课程 Disruptor 是一种内存消息队列 它经Java 中另外一个非常常用的内存消息队列 ArrayBlockQueue ABS 的性能 要高出一个数量级 可以算得上是最快的内存消息队
  • 深入浅出UML类图(五)

    实例分析3 售票机控制程序 某运输公司决定为新的售票机开发车票销售的控制软件 图I给出了售票机的面板示意图以及相关的控制部件 图I 售票机面板示意图 售票机相关部件的作用如下所述 1 目的地键盘用来输入行程目的地的代码 例如 200表示总站
  • 1063. 计算谱半径(20)

    在数学中 矩阵的 谱半径 是指其特征值的模集合的上确界 换言之 对于给定的n个复数空间的特征值 a1 b1i an bni 它们的模为实部与虚部的平方和的开方 而 谱半径 就是最大模 现在给定一些复数空间的特征值 请你计算并输出这些特征值的
  • Java学习笔记:Servlet

    JavaWeb三大组件 Servlet Filter 过滤器 Listener 监听器 Servlet生命周期 1 初始化阶段 调用init 方法 2 响应客户请求阶段 调用service 方法 3 终止阶段 调用destroy 方法 生命
  • Eclipse 部署Thrift 实例 & 服务模型实例演示(java)

    一 Eclipse 部署Thrift 实例 注 需要1 工具包thrift 0 9 0 ext 下载地址http download csdn net detail xyw eliot 5414527 2 Java语言Thrift工程需要的j
  • Java循环for, while和do...while&break,continue,return

    为什么80 的码农都做不了架构师 gt gt gt Java有非常灵活的三循环机制 可以使用以下三种循环之一 while 循环 do while 循环 for 循环 从Java5 增强的for循环中进行了介绍 这主要是用于数组 while
  • go中make和new的用法,以及nil用法

    看如下代码 package main import fmt unsafe func main make和new函数 new函数用法 a 10 默认值 int rune byte float bool string这些类型都有默认值 指针 切
  • 多进程和多线程的差别(优缺点)

    多进程 多线程 目录 一 多线程的优点 二 多进程的优点 目录 对于问多进程和多线程之间的差别的问题 其实我们只要表明我们所知道的多进程和多线程各自的优点就可以了 一 多线程的优点 1 线程间通信会更加灵活 包括进程间通信在内还可以使用全变
  • Python基于Scapy的抓包协议分析器

    环境 py3 8 原理 模仿wireshark 利用python的scapy模块下的sniff 函数进行数据的抓取 并进行所谓的 消费者处理 即跟据OSI网络协议模型进行协议分析 将整个程序精简的概括得到最关键的一句代码 sniff prn
  • 企业商家怎么做小程序商城?

    自小程序商城的出现 帮助了很多企业商家打破了传统线下卖货的瓶颈 打通了线上卖货的渠道 为企业商家带来销售额的提升 当然还没入局的企业商家趁现在也可以做自己的小程序商城 在线上流量中分一杯羹 那么下面说说企业商家怎么做小程序商城 一 准备好小
  • JSP-内置对象

    response动态响应的例子 response重定向的例子 通过session对象来保证 在不同页面跳转时是同一个用户
  • ehcache缓存过期时间和注解的使用。

    一 过期时间的测试 我们配置一个spring整合ehcache的例子 使用自动注解缓存的方式 进行测试 timeToIdleSeconds表示最大空闲的时间 timeToLiveSeconds表示最大存活时间 例1 结果 5秒间隔内不过期