You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何缓存objectMapper.readValue方法的调用结果

缓存JSON解析结果的实现方案

核心思路

objectMapper.readValue的入参是JSON字符串,出参是ObjectNode对象,所以直接用JSON字符串作为缓存key,解析得到的ObjectNode作为缓存value即可。

可选实现方式

  • 本地场景优先用Caffeine/Guava Cache做内存缓存,适合单服务实例内的解析结果复用,性能最高
  • 多实例共享场景可选用Redis等分布式缓存,需要额外处理ObjectNode的序列化逻辑

代码示例(基于Caffeine本地缓存)

首先全局初始化缓存实例,参数可根据业务实际调整:

private final LoadingCache<String, ObjectNode> jsonNodeCache = Caffeine.newBuilder()
        .maximumSize(1000) // 最大缓存1000条,避免内存溢出
        .expireAfterAccess(5, TimeUnit.MINUTES) // 5分钟未访问自动淘汰
        .build(key -> objectMapper.readValue(key, ObjectNode.class));

改造原有业务逻辑:

public String getPropertyFromJson(String json, String property) {
    if (json == null) {
        return null;
    }
    String propertyValue = null;
    // 先查缓存,未命中会自动执行解析逻辑并存入缓存
    final ObjectNode node = jsonNodeCache.get(json);
    if (node.has(property)) {
        propertyValue = node.get(property).textValue();
    }
    return propertyValue;
}

注意事项

  • 若业务代码后续会修改返回的ObjectNode,请缓存ObjectNode的深拷贝副本,避免脏写污染缓存数据
  • 要根据JSON字符串的平均大小、访问频率调整缓存的最大容量和过期策略,防止占用过多内存
  • 解析异常会默认直接抛出,可根据业务需要在缓存的build逻辑中添加异常捕获处理

内容的提问来源于stack exchange,提问作者getzels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:06:03