首页 > 编程语言 >java map缓存数据自动过期

java map缓存数据自动过期

时间:2023-06-01 17:01:45浏览次数:52  
标签:map java String long 缓存数据 private new public

 

package ztest;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 页面跳转时产生一个 token
 * 带到页面
 * 页面保存时校验token
 * 
 * 防止重复提交
 * 
 * */
public final class TokenCache {
    
    private static final Map<String, WrapMapValue> CACHE = new HashMap<String, WrapMapValue>();
    private static final int DELAY_TIME_IN_MILLIS = 0;
    private static final int PERIOD_TIME_IN_MILLIS = 5 * 60 * 1000;

    static {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Iterator<WrapMapValue> it = CACHE.values().iterator();
                while (it.hasNext()) {
                    WrapMapValue _v = it.next();
                    if (_v.getCreateTimeInMillis() + _v.getExpirytimeInMillis() < new Date().getTime()) {
                        it.remove();
                    }
                }
            }
        }, DELAY_TIME_IN_MILLIS, PERIOD_TIME_IN_MILLIS);
    }
    
    private TokenCache(){
        
    }

    public static void put(String key, String value, long expiryTimeInMillis) {
        CACHE.put(key, new WrapMapValue(new Date().getTime(), expiryTimeInMillis, value));
    }

    public static String get(String key) {
        WrapMapValue _v = CACHE.get(key);
        if (_v.getCreateTimeInMillis() + _v.getExpirytimeInMillis() >= new Date().getTime()) {
            return _v.getMapValue();
        } else {
            return null;
        }
    }

}

class WrapMapValue {
    private long bornTimeInMillis;
    private long lifeTimeInMillis;
    private String mapValue;

    WrapMapValue(long bornTimeInMillis, long lifeTimeInMillis, String mapValue) {
        this.bornTimeInMillis = bornTimeInMillis;
        this.lifeTimeInMillis = lifeTimeInMillis;
        this.mapValue = mapValue;
    }

    public long getCreateTimeInMillis() {
        return bornTimeInMillis;
    }

    public long getExpirytimeInMillis() {
        return lifeTimeInMillis;
    }

    public String getMapValue() {
        return mapValue;
    }
}

 

标签:map,java,String,long,缓存数据,private,new,public
From: https://www.cnblogs.com/zno2/p/6113318.html

相关文章

  • Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较已经为什么禁止使用do
    场景阿里Java开发手册嵩山版中明确指出:1、BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法equals()方法会比较值和精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度2、禁止使用构造方法BigDecimal(double)的方式把double值转换为BigDecimal对象BigDeci......
  • java.lang.ClassNotFoundException: weblogic.utils.NestedException
    我单元测试的时候报这种错误Causedby:java.lang.ClassNotFoundException:weblogic.utils.NestedException atjava.net.URLClassLoader$1.run(URLClassLoader.java:202) atjava.security.AccessController.doPrivileged(NativeMethod) atjava.net.URLClassLoader.findC......
  • Java学习问题记录
    1.特殊基本数据类型除了这两个,其他的变量都不需要加符号//定义时需要在变量的值后面加L或llongcount=300000L;//定义时需要在变量的值后面加f或Ffloatcode=10.3f;2.常量定义//在Java中使用final关键字来修饰常量,声明方式和变量类似:(通常使用大写字母表示常量)fina......
  • map
    这么几个容器看下来,可以发现,他们其实大同小异.......
  • 5.部署tomcat+war包的java网页项目
    1.将war包丢到tomcat-webapps目录下2.修改war包下的数据库配置文件:datasource.propertiescd/usr/local/tomcat/apache-tomcat-8.5.41/webapps/recruit.students/WEB-INF/classesvidatasource.properties 3.用dbeaver连接数据库并导入数据库文件   点击恢复数据库......
  • 新版idea快捷键总结学习----(用于java开发模式)
    选择代码区ctrlw如果放到以if开头的语句,可以选择if判断条件所在的代码片段游标在单个单词下时选择单词在选中多个单词时,选择整个字符串三次点击时,如果不在字符串单词下,用于选择{}内的代码片段逐级递增如果在单词下方,用于选择单词所在的字符串并且向外逐级扩展。ctrl......
  • C++中的map用法学习
    map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的......
  • z-index控制层级显示【JavaScript-Dom&Bom】
    溢出设置overflowvisible(默认)超出部分显示hidden超出部分隐藏scroll超出部分滚动显示行内元素垂直对齐方式vertical-alignbaseline基线对齐(默认)top上对齐middle中间对齐bottom下对齐控制显示层级当元素为非static定位时,可能出现层叠......
  • Java小白入门学习方法总结
    系统的整理了我自学Java的学习方法,希望对大家自学Java有帮助~首先,需要一套系统完整的学习教程,这里推荐可以到b站,我看的动力节点老杜的Java基础课,现在更新了最新版Java17的,可直接看最新版,小白无脑入,详细且全面学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPJava小白学习......
  • java 打印个三角形
    publicclassImoocStudent{publicstaticvoidmain(String[]args)throwsException{intline=9;for(inti=1;i<=line;i++){for(intk=0;k<line-i;k++){System.out.print("");......