GUAVA缓存失效清理

2024-06-14 10:58
文章标签 清理 缓存 失效 guava

本文主要是介绍GUAVA缓存失效清理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GUAVA缓存虽然有expireAfterWrite/expireAfterAccess方法和expire的监听器,但是guava自身并不会定时去判断缓存是否失效,触发判断失效逻辑是调用get方法。这自然很难满足需要对失效缓存进行监控的场景。解决方案如下:

@ConditionalOnProperty(value = "spring.application.heartBeatWeb", havingValue = "1")
@Component
public class HeartBeatInitializer extends BaseController implements ApplicationRunner {private static final Logger LOG = LoggerFactory.getLogger(HeartBeatInitializer.class);@Value("${spring.application.heartBeatWeb}")private int heartBeatWeb;@Resourceprivate HeartBeatConfig heartBeatConfig;@Resourceprivate HeartBeatServiceImpl heartBeatService;@Resourceprivate IRedisService redisService;@Resourceprivate KafkaTemplate kafkaTemplate;@Resourceprivate ThreadPoolTaskScheduler threadPoolTaskScheduler;@Overridepublic void run(ApplicationArguments applicationArguments) throws Exception {try {Thread.sleep(2000);heartBeatService.setHeartBeatCache(CacheBuilder.newBuilder().expireAfterAccess(baseResponse.getData().getStopRequestTime(), TimeUnit.SECONDS).removalListener(new RemovalListener<String, Object>() {@Overridepublic void onRemoval(RemovalNotification<String, Object> removalNotification) {LOG.info("被移除了:" + removalNotification.getCause());}}).build());threadPoolTaskScheduler.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {try {schedule();} catch (ExecutionException e) {e.printStackTrace();}}},baseResponse.getData().getStopRequestTime()*500);}} catch (Exception e) {LOG.error(e.getMessage(), e);}}public void schedule() throws ExecutionException {LOG.info("定时器");heartBeatService.getHeartBeatCache().cleanUp();}
}

这篇关于GUAVA缓存失效清理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060217

相关文章

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给