SpringBoot中设置超时30分钟自动删除元素的List和Map

简介

在 Spring Boot 中,你可以使用多种方法来实现自动删除超时元素的 List 或 Map。以下是两种常见的方式:

  • 如果你需要简单的功能并且不介意引入外部依赖,可以选择 Guava Cache。
  • 如果你想要更灵活的控制,使用 Spring 的调度功能也是一个不错的选择。

1. 使用 Scheduled Task

你可以使用 Spring 的 @Scheduled 注解来定期清理过期的元素。

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;@Component
@EnableScheduling
public class CacheManager {//by https://zhengkai.blog.csdn.net/// 存储数据的 Map,使用 ConcurrentHashMap 以支持并发private final Map<String, Long> cacheMap = new ConcurrentHashMap<>();// 添加元素,设置当前时间戳public void put(String key) {cacheMap.put(key, System.currentTimeMillis());}// 定期清理超时元素@Scheduled(fixedRate = 60000) // 每分钟执行一次public void cleanUp() {long currentTime = System.currentTimeMillis();long timeout = 30 * 60 * 1000; // 30 分钟超时Iterator<Map.Entry<String, Long>> iterator = cacheMap.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, Long> entry = iterator.next();if (currentTime - entry.getValue() > timeout) {iterator.remove(); // 删除超时元素}}}// 获取元素public Boolean get(String key) {return cacheMap.containsKey(key);}
}

在上面的代码中,我们创建了一个 CacheManager 类,它使用 ConcurrentHashMap 来存储元素及其添加时间。@Scheduled 注解用于定义定期清理超时元素的任务。定期任务每分钟执行一次,检查并删除 30 分钟之前添加的元素。

2. 使用 Guava Cache

如果你希望更简单地管理缓存,可以使用 Guava 的 Cache。它提供了过期策略的支持。

示例代码

首先,确保在 pom.xml 中添加 Guava 依赖:

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>33.3.1-jre</version>
</dependency>

然后,使用 Guava Cache:

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;@Component
public class CacheManager {private Cache<String, String> cache;@PostConstructpublic void init() {// 创建一个支持过期的缓存,30分钟后过期。 by https://zhengkai.blog.csdn.net/cache = CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).build();}// 添加元素public void put(String key, String value) {cache.put(key, value);}// 获取元素public String get(String key) {return cache.getIfPresent(key);}
}

在这个例子中,我们使用 Guava 的 CacheBuilder 创建了一个具有 30 分钟自动过期策略的缓存。使用 put 方法可以添加元素,而使用 getIfPresent 方法可以获取当前元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476344.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@RequestBody、@Data、@Validated、@Pattern(regexp=“?“)(复习)

目录 一、注解RequestBody。 二、注解Data。 三、注解Validated、Pattern(regexp"?")。 1、完成实体参数&#xff08;对象属性&#xff09;校验。 2、NotNull、NotEmpty、Email。 一、注解RequestBody。 &#xff08;如&#xff1a;JSON格式的数据——>Java对象&…

使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法

在使用uniapp开发微信小程序时候&#xff0c;过多的引入uni_modules的组件库&#xff0c;会导致主包文件过大&#xff0c;导致无法上传微信小程序&#xff0c;主包要求大小不超过1.5MB.分包大小每个不能超过2M。 解决方法&#xff1a;分包。 1.对每个除了主页面navbar的页面进…

NVR录像机汇聚管理EasyNVR大华NVR管理平台:深耕视频监控市场的多元化兼容

在当今快速发展的视频监控行业中&#xff0c;技术的日新月异与设备种类的繁多给系统集成与运维带来了前所未有的挑战。为了应对这一现状&#xff0c;EasyNVR作为一款集视频流接收、转发、存储、管理于一体的综合型视频服务平台&#xff0c;凭借其深厚的技术积累和对市场的精准洞…

游戏行业趋势:“AI、出海、IP”大热下,如何提升竞争力?

游戏&#xff1a;新品供给影响业绩释放节奏&#xff0c;后续游戏新品逐步上线&#xff0c;或驱动板块业绩修复 2024年前三季度A股游戏板块实现营业收入681.8亿元&#xff0c;同比增长5.1%&#xff0c;实现归母净利润73.3亿元&#xff0c;同比下滑30.4%&#xff0c;或主要受 20…

【vba源码】导入excel批注信息

Hi&#xff0c;大家好呀&#xff01; 又到了一周一分享的时间&#xff0c;上周繁忙的我都没有给大家直播&#xff0c;视频也没更新&#xff0c;那这周大家放心&#xff0c;都会给大家更新&#xff0c;今天我们来讲点啥呢&#xff1f;每周找优质的内容给大家更新是我最最痛苦的…

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…

nginx代理解决跨域问题CORS错误

配置如下 # 允许跨域请求add_header Access-Control-Allow-Origin *;# 允许带身份验证信息的跨域请求add_header Access-Control-Allow-Credentials true;# 允许的请求方法add_header Access-Control-Allow-Methods GET, POST, OPTIONS;# 允许的请求头add_header Access-Contro…

H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连

EasyPlayer.js无插件H5播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&#x…

uniapp开发微信小程序笔记3-全局配置、导航栏配置、tabBar配置

前言&#xff1a; 本文记录的是微信小程序的全局配置、导航栏配置、tabBar配置 一、全局配置&#xff1a; 可以直接查官方文档&#xff1a;pages.json 页面路由 | uni-app官网&#xff0c;有非常详细的文档说明 都是在 pages.json里面做配置的&#xff0c;我们可以看到已经有…

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步&#xff1a;配置RCC&#xff0c;把我们涉及到的外设的时钟都打开 &#xff08;此处EXTI是默认打开的&#xff0c;而NVIC是内核外设无需配置&#xff09; 第二步&#xff1a;配置GPIO,选择端口为输入模式 第三…

【QT】绘图

个人主页~ 绘图 一、绘图1、基础内容2、绘制形状&#xff08;1&#xff09;线段&#xff08;2&#xff09;矩形&#xff08;3&#xff09;圆形&#xff08;4&#xff09;文本&#xff08;5&#xff09;画笔&#xff08;6&#xff09;画刷 3、绘制图片&#xff08;1&#xff09;…

Quality minus junk论文阅读

Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…

葡萄酒(wine)数据集——LDA、贝叶斯判别分析

1 葡萄酒(wine)数据集介绍 葡萄酒识别数据集(Wine Recognition dataset)通常用于多类别分类问题建模。数据集包括从三个不同的品种(类别)的葡萄酒中测得的13种不同的化学特征,共178个样本。这些化学特征包括酸度、灰分、酒精浓度等。 该数据集是由UCI机器学习库提供,并…

贪心算法 -- 递增子序列

目录 最长递增子序列 题解&#xff1a; 代码&#xff1a; 递增的三元子序列 题解&#xff1a; 代码&#xff1a; 简易版&#xff1a; 最长连续递增序列 题解&#xff1a; 代码&#xff1a; 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xf…

【ArcGIS微课1000例】0132:从多个GIS视角认识与攀登珠穆朗玛峰

文章目录 1. Map Viewer中打开2. 场景查看器中打开3. ArcGIS中打开4. QGIS中打开5. Globalmapper中打开6. ArcGIS Earth中打开官网地址:https://www.arcgis.com/home/item.html?id=504a23373ab84536b7760c0add1e0c1c 1. Map Viewer中打开 以下展示不同底图样式的珠穆朗玛峰壮…

如何在Word文件中设置水印以及如何禁止修改水印

在日常办公和学习中&#xff0c;我们经常需要在Word文档中设置水印&#xff0c;以保护文件的版权或标明文件的机密性。水印可以是文字形式&#xff0c;也可以是图片形式&#xff0c;能够灵活地适应不同的需求。但仅仅设置水印是不够的&#xff0c;有时我们还需要确保水印不被随…

windows的WSL Ubuntu子系统重置root或其他用户的密码

思路&#xff1a;以管理员身份运行PowerShell&#xff0c;在命令行窗口重置密码 &#xff0c;不需要删除或重新安装Linux子系统。 1、以管理员身份运行PowerShell 2、用root用户启动Ubuntu&#xff0c;执行 wsl.exe --user root 3、重置密码&#xff0c;执行passwd username&…

UE5 5.1.1创建C++项目,显示error C4668和error C4067的解决方法

因为工作要求&#xff0c;没法使用最新 5.5版本的ue5 而是要用ue5.1和5.2版本。 但是我在安装下载了visual studio2022后&#xff0c;使用 ue5.1编辑器 创建C项目&#xff0c;爆出如下错误。 error C4668: ?????__has_feature?????ΪԤ?????꣬???0????…

SpringCloud多机部署,负载均衡-LoadBalance

一.负载均衡 1.1问题描述 //根据应用名称获取服务列表 List<ServiceInstance> instancesdiscoveryClient.getInstances("product-service"); //一个微服务可能有多个实例&#xff0c;获取第一个 EurekaServiceInstance instance(EurekaServiceInstance)insta…

『 Linux 』文件与网络套接字的内部关系

文章目录 回顾进程控制块socket与文件的关系wait_queue_head_t文件与套接字相关的调用方法系统中的套接字网络协议栈与方法集报文的管理 回顾进程控制块 每个进程都存在着自己的PCB结构体,即task_struct结构体,这个结构体是用来描述一个进程的; /* 已省略部分代码 */ struct t…