这就是我在 Spring Boot 中构建咖啡因缓存的方式:
Caffeine.newBuilder()
.initialCapacity(200000)
.maximumSize(200000)
.expireAfterWrite(15, TimeUnit.MINUTES)
.scheduler(Scheduler.systemScheduler())
.executor(caffeineWriteClientConnectionPool(cacheSpec))
.recordStats(() -> caffeineMetrics)
.writer(new CacheWriter<Object, Object>() {});
我使用以下同步方法:
cache.getAllPresent() -> fetch all keys present in cache if not fallback to distributed cache/db and then add the key to the caffeine cache
cache.putAll() -> a key is added to the caffeine cache when its missed
当缓存负载很高时,我看到 get/put 时间增加(> 100ms),这让我想这些调用是否应该在 hystrix 之后,但我认为这将是一个过度的为内存搜索启动线程?
此外,我看到 GC 经常发生,我相信这可能会影响读/写时间。关于设置 GC 的任何建议/最佳实践或我可以采取的任何其他一般性建议来改善延迟?谢谢