使用监听器:定时清除map缓存
时间:2022-04-22
本文章向大家介绍使用监听器:定时清除map缓存,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
配置web.xml:注意位置
<!-- 清理map缓存 -->
<listener>
<listener-class>com.test.utils.sms.CacheMap</listener-class>
</listener>
监听类:
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.test.utils.sms.VerifyCodeManager.InnerCode;
public class CacheMap implements ServletContextListener {
public void contextDestroyed(ServletContextEvent event) {
// 服务停止时执行
}
public void contextInitialized(ServletContextEvent arg0) {
// 服务启动、初始化时执行------60分钟一次
int minutes = 60;
int second = 60;
int timeDistance = 1000;
// 使用定时类,每隔一段时间执行
java.util.Timer timer = new java.util.Timer();
timer.schedule(new MyRandomMap(), new Date(), minutes * second * timeDistance);
}
private class MyRandomMap extends java.util.TimerTask // 实现了TimerTask的类
{
public void run() {
clearRandomMap();// 每隔一段时间执行
//System.out.println("start++++++++++");
}
}
public void clearRandomMap() {
// 清除map过期的key
List<String> list = new ArrayList<String>();
Iterator<String> iter = VerifyCodeManager.codes.keySet().iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
InnerCode val = VerifyCodeManager.codes.get(key);
// 设计很巧妙:使用时间比较大小返回真假(取反),写入将要删除的数组
if (!val.isExpire()) {
list.add(key);
//System.out.println("key:"+key);
}
}
// 执行删除操作
for (int i = 0; i < list.size(); i++) {
VerifyCodeManager.codes.remove(list.get(i));
//System.out.println("delete:"+list.get(i));
}
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FastDFS基于Docker安装
- 用Python实现批量高效文件处理 解放你的双手
- Windows下使用VS2013编译使用SDL库
- C语言经典习题100例(一)1-5
- C语言经典习题100例(二)6-10
- Python 快速验证代理IP是否有效
- C语言入门系列之6.一维和二维数组
- C语言经典习题100例(五)21-25
- Python 列表 使用技巧
- 通过案例学Python之判断属相
- C语言经典习题100例(七)31-35
- C语言经典习题100例(八)36-40
- 学习笔记:一个MySQL实例有多个Activiti数据库问题
- C语言经典习题100例(九)41-45
- C语言入门系列之1.C语言概述和上机运行简单C程序