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

Spring Boot+Hazelcast缓存异常:不同参数返回相同结果求助

问题原因及解决方案

核心问题:缓存Key配置错误

你的业务类中@Cacheable注解使用了固定的DUMMY_CALL_KEY作为缓存Key,这会导致所有不同参数的请求都命中同一个缓存条目。比如首次请求pageSize=50时生成的缓存,后续pageSize=10的请求会直接读取该缓存,不会重新执行方法查询新数据。

解决方案

修改@Cacheable的Key配置,让它根据请求参数动态生成唯一缓存Key,确保不同参数组合对应不同缓存条目:

方案1:基于请求对象生成动态Key

直接将请求对象作为Key生成依据,Spring会自动序列化CallSearchRequest生成唯一Key(需确保对象的equals()和hashCode()逻辑正确,或依赖默认序列化):

@Cacheable(value = DUMMY_CALL_NAME, key = "#callSearchRequest")
public ListResponse searchList(CallSearchRequest callSearchRequest) {
    // 业务逻辑
    return ListResponse;
}

方案2:指定关键参数生成Key

如果只需部分参数参与Key生成(如pageSize、pageNumber等),可明确指定:

@Cacheable(value = DUMMY_CALL_NAME, key = "#callSearchRequest.pageSize + '_' + #callSearchRequest.pageNumber + '_' + #callSearchRequest.portCode")
public ListResponse searchList(CallSearchRequest callSearchRequest) {
    // 业务逻辑
    return ListResponse;
}

补充说明

  • 确认DUMMY_CALL_KEY是固定字符串(如"dummy_call_key"),这正是问题根源,需替换为动态生成逻辑。
  • 你的CallSearchRequest已实现Serializable接口,满足Hazelcast缓存对象的序列化要求,无需额外修改。

额外验证点

若修改Key后问题仍存在,可检查:

  • 确认@Cacheable的value与配置文件中cacheName: DUMMY_CACHE一致,确保缓存配置生效。
  • Hazelcast Near Cache的maxSize=10是条目淘汰规则,与当前缓存Key冲突问题无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:52:47