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
相关产品推荐
相关产品推荐

