Caffeine缓存不刷新问题

2023-10-27

一、先看问题代码

缓存管理器配置:

import java.util.concurrent.TimeUnit;

import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.github.benmanes.caffeine.cache.Caffeine;

@Configuration
public class CacheConfig {

    private static final int EXPIRE_MINUTES = 5;
    private static final int MAXIMUM_SIZE = 10000;

    /**
     * 配置缓存管理器
     *
     * @return 缓存管理器
     */
    @Bean("cacheManager")
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                // 设置最后一次写入或访问后经过固定时间过期
                .expireAfterAccess(EXPIRE_MINUTES, TimeUnit.MINUTES)
                // 初始的缓存空间大小
                //.initialCapacity(100)
                // 缓存的最大条数
                .maximumSize(MAXIMUM_SIZE));
        return cacheManager;
    }
}

具体使用:

@Override
@Cacheable(value = "logicTypeCache", unless = "#result == null")
public Map<Long, String> getAllLogicType() {
    log.info("TypeCacheService|getAllLogicType.");
    try {
        List<KeyValueResp> keyValueRespList = logicTypeApi.getAllLogicTypeName().getData();
        if (CollectionUtils.isEmpty(keyValueRespList)) {
            return new HashMap<>();
        }
        return keyValueRespList.stream().collect(Collectors.toMap(KeyValueResp::getId,
                KeyValueResp::getName, (a, b) -> a));
    } catch (Exception e) {
        log.error("TypeCacheService|getAllLogicType error: {}", e.getMessage());
    }
    return new HashMap<>();
}

二、现象

一次上线后,发现缓存查出来的都是空,而且缓存一直不失效。查看线上调用日志,getAllLogicType()一直没有去请求更新缓存。查看之前的日志,发现基本也是一天才去更新一次缓存,有时候甚至不更新。
在这里插入图片描述

三、原因排查

这样看来应该是缓存策略配置的有问题,果然,问题出在数据过期策略上。具体原因有两个:
1、项目里用的expireAfterAccess,含义是最后一次访问之后,隔多久没有被再次访问的话,就过期。然而服务一直被访问,就一直不会过期。
在这里插入图片描述
2、@Cacheable的使用上也有问题。上线后,logicTypeApi请求超时,返回一个空的HashMap,不等于null,就被缓存了。加上其一的原因,就一直缓存着一个空的HashMap,就导致缓存查出来的一直是空。
在这里插入图片描述

四、修正后代码

1、缓存管理器配置:
修改缓存过期策略expireAfterAccess为expireAfterWrite,含义是某个数据在多久没有被更新后,就过期。
在这里插入图片描述
2、具体使用:
下游服务异常时应该不缓存。
在这里插入图片描述
修正后,线上缓存基本按照设定的时间更新:
在这里插入图片描述

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

Caffeine缓存不刷新问题 的相关文章

  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 如何从控制器访问片段中的片段?

    我有一个名为 cutleryCustomerSearch 的视图 其中包含 替换 一个片段 div div div div 在此片段中 我有一个表 我喜欢通过 ajax 更新它 table 我如何设置处理 ajax 请求的控制器方法的返回
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 使用@Transactional注解批量插入

    在我的 Spring 应用程序中 我想一次性在数据库中插入近 1500 条记录 我在后端使用 Spring 4 X 和普通休眠 在我的服务层中 我使用 Transactional 注释 现在 在某个时间点之后插入记录时 我遇到内存不足错误
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • 什么是春季里程碑?

    我必须学习使用 Maven 和 Spring 在网络上 我在不同的地方看到了术语 spring里程碑 和 spring里程碑存储库 但这是一个里程碑吗 我用谷歌搜索了一下 但没有找到满足我好奇心的定义 谁能帮我 里程碑是项目管理术语 htt
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 基于tensorflow的手势检测和手势识别分类

    项目目的 在手机端实现用户手势的检测并且识别用户所做的手势 遇到的问题 首先在手部检测的解决办法中 我尝试过用opencv进行手部识别 但存在的问题是背景对手的识别的影响太大 如果采用颜色进行手和背景的区分的话 又会受到光照等影响 总体而言
  • 【机器学习实战】决策树 python代码实现

    typora copy images to upload 第三章 决策树 3 1决策树的构造 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失不敏感 可以处理不相关的特征数据 缺点 可能会产生过度匹配的问题 适用数据类型 数据型和标称
  • 弱网的概念以及弱网测试

    什么是弱网测试 在当今移动互联网盛行的时代 网络的形态除了有线连接 还有2G 3G Edge 4G Wifi等多种手机网络连接方式 不同的协议 不同的制式 不同的速率 使移动应用运行的场景更加丰富 从测试角度来说 需要额外关注的场景就远不止
  • SpringBoot日志配置【详解】

    文章目录 前言 1 为什么使用Logback 2 Logback使用 2 1 添加依赖 2 2 默认配置 3 logback spring xml详解 3 1 configuration元素 3 2 logger 元素 3 3 root 元
  • 购物商城---页面缓存oscached

    流程图 web xml
  • VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏

    转载 http blog csdn net easysec article details 8833457 转载 http www vckbase com module articleContent php id 567 title 用VS
  • 离线安装Docker镜像

    部分线上服务器无法连接公网 或者服务器下载镜像比较慢 遇到这种情况要怎么解决 我们可以在联网的本机或服务器上 将已经下载好的镜像导出 然后导入到没有网络的服务器上 通过Docker加载 例如 这里有一个镜像grafana loki 2 2
  • 订单系统开发

    一 订单系统基本框架的搭建 1 创建maven工程 pom xml文件内容如下
  • WSA with Magisk Root安装配置教程(2023.5)

    前言 最近正式走上了安卓逆向的道路 刚开始尝试了各种模拟器 雷电 夜神 及其海外版 并且安装配置了多次magisk 倒不是说这些模拟器的体验有多差 主要还是不能与 Windows Hype V 共存导致无法使用 WSL 这点让我无法接受 s
  • markdown语法最全汇总

    一 markdown简介 注 如果对markdown有一定了解 可以略过此处 第一章主要对markdown基础知识做个补充 摘自菜鸟教程此处原文档 博客原地址 欢迎收藏访问 1 1 markdown背景 1 markdown是一种轻量级标记
  • 一枚芯片的实际成本是多少?(1)

    芯片的硬件成本构成 芯片的成本包括芯片的硬件成本和芯片的设计成本 芯片硬件成本包括晶片成本 掩膜成本 测试成本 封装成本四部分 像ARM阵营的IC设计公司要支付给ARM设计研发费以及每一片芯片的版税 但笔者这里主要描述自主CPU和Intel
  • shiny教程一 -- shiny入门

    Shiny是一个R软件包 可轻松从R直接构建交互式Web应用程序 本课程将使您立即开始构建Shiny应用程序 如果还未安装Shiny软件包 打开R会话窗 确保联网状态 然后运行 install packages shiny Shiny软件包
  • vue 中click.stop的用法

    click stop 阻止点击事件继续传播 场景 在table中使用 点击当前行 当前行被勾选 但是点击当前行中按钮或点击事件时 使用此方法 则在触发当前点击事件后 阻止行的选中事件 使用 html
  • input“输入框”常见问题及解决方法

    1 ios中 输入框获得焦点时 页面输入框被遮盖 定位的元素位置错乱 当页input存在于吸顶或者吸底元素中时 用户点击输入框 输入法弹出后 fiexd失效 页面中定位好的元素随屏幕滚动 针对这个问题 我们一起来看下以下几种方案 方案一 W
  • FOXBORO FBM232 P0926GW 自动化控制模块

    Foxboro FBM232 P0926GW 是 Foxboro 福克斯博罗 自动化控制系统的一部分 通常用于监测和控制工业过程 以下是关于这种类型的自动化控制模块可能具有的一些常见功能 数字输入通道 FBM232 P0926GW 控制模块
  • 鸿蒙系统 服务器,鸿蒙开发之环境准备【1】-基于Deepin20操作系统的编译服务器环境搭建遇到的问题及解决方式...

    Hi3861 code 1 0 python build py wifiiot 196 197 ACTION vendor hisi hi3861 hi3861 run wifiiot scons build lite toolchain
  • vscode launch.json 常用配置

    Use IntelliSense to learn about possible attributes Hover to view descriptions of existing attributes For more informati
  • 毕业设计-基于机器视觉的智能安检系统设计 -OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 智能安检机概述 二 嵌入式控制系统 三 图像处理模块设计 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精
  • Blender石头雕刻

    1 建立一个plane 选中一个点后ctrl I反选其他的点 然后删去 2 e挤出点 3 添加蒙皮skin修改器 4 全选所有点 ctrl a放大或缩小
  • Caffeine缓存不刷新问题

    一 先看问题代码 缓存管理器配置 import java util concurrent TimeUnit import org springframework cache CacheManager import org springfra