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

Spring Boot中如何记录Hazelcast Near Cache的命中/未命中日志?

Hazelcast Near Cache 命中/未命中日志记录方案

Hazelcast原生提供了Near Cache的统计能力,但没有直接内置命中/未命中的日志输出,你可以基于它的API快速实现日志记录,不需要完全手动开发缓存逻辑。

1. 先开启Near Cache统计功能

不管用哪种配置方式(XML/YAML/Java代码),都需要给目标Near Cache开启统计:

  • YAML配置(hazelcast.yaml):
hazelcast:
  maps:
    your-map-name:
      near-cache:
        enabled: true
        stats-enabled: true
  • Java配置类:
@Bean
public Config hazelcastConfig() {
    Config config = new Config();
    NearCacheConfig nearCacheConfig = new NearCacheConfig("your-map-name")
        .setEnabled(true)
        .setStatsEnabled(true);
    config.getMapConfig("your-map-name").setNearCacheConfig(nearCacheConfig);
    return config;
}

2. 实现日志记录的两种方式

方式一:定时输出统计汇总日志

适合需要定期查看缓存整体命中率的场景,用Spring定时任务配合Near Cache统计API实现:

import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.map.NearCacheStats;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class NearCacheStatsLogger {
    private static final Logger log = LoggerFactory.getLogger(NearCacheStatsLogger.class);
    private final HazelcastInstance hazelcastInstance;

    public NearCacheStatsLogger(HazelcastInstance hazelcastInstance) {
        this.hazelcastInstance = hazelcastInstance;
    }

    @Scheduled(fixedRate = 60000) // 每分钟打印一次
    public void logNearCacheMetrics() {
        IMap<?, ?> map = hazelcastInstance.getMap("your-map-name");
        NearCacheStats stats = map.getNearCacheStats();

        log.info("Near Cache [your-map-name] Stats - Total Hits: {}, Total Misses: {}, Hit Ratio: {:.2f}",
                stats.getHits(), stats.getMisses(), stats.getHitRatio());
    }
}

方式二:实时记录单条命中/未命中日志

如果需要记录每次缓存命中或未命中的具体key,可以自定义NearCacheEntryListener:

import com.hazelcast.map.NearCacheEntryEvent;
import com.hazelcast.map.NearCacheEntryListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class NearCacheHitMissListener implements NearCacheEntryListener<Object, Object> {
    private static final Logger log = LoggerFactory.getLogger(NearCacheHitMissListener.class);

    @Override
    public void onHit(NearCacheEntryEvent<Object, Object> event) {
        log.debug("Near Cache hit for map [{}], key: {}", event.getSourceName(), event.getKey());
    }

    @Override
    public void onMiss(NearCacheEntryEvent<Object, Object> event) {
        log.debug("Near Cache miss for map [{}], key: {}", event.getSourceName(), event.getKey());
    }

    // 实现其他空方法(不需要可留空)
    @Override public void entryAdded(NearCacheEntryEvent<Object, Object> event) {}
    @Override public void entryRemoved(NearCacheEntryEvent<Object, Object> event) {}
    @Override public void entryUpdated(NearCacheEntryEvent<Object, Object> event) {}
    @Override public void entryEvicted(NearCacheEntryEvent<Object, Object> event) {}
    @Override public void entryExpired(NearCacheEntryEvent<Object, Object> event) {}
}

然后在Near Cache配置中注册这个监听器:

NearCacheConfig nearCacheConfig = new NearCacheConfig("your-map-name")
    .setEnabled(true)
    .setStatsEnabled(true)
    .addNearCacheEntryListenerConfig(
        new NearCacheEntryListenerConfig(new NearCacheHitMissListener())
    );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:33:10