【发布时间】:2020-08-19 09:05:47
【问题描述】:
spring 缓存的默认大小是多少? 如果另一个可以缓存的条目出现怎么办?它是忽略它还是从缓存中删除一个条目以容纳一个新条目?如果它删除,那么它如何决定删除哪个?
我们如何手动提供缓存大小? 我不是指任何其他缓存,例如 Caffeine、EHCache 等。 我指的是默认的 spring 缓存。
【问题讨论】:
标签: java spring-boot caching spring-cache
spring 缓存的默认大小是多少? 如果另一个可以缓存的条目出现怎么办?它是忽略它还是从缓存中删除一个条目以容纳一个新条目?如果它删除,那么它如何决定删除哪个?
我们如何手动提供缓存大小? 我不是指任何其他缓存,例如 Caffeine、EHCache 等。 我指的是默认的 spring 缓存。
【问题讨论】:
标签: java spring-boot caching spring-cache
Spring 的缓存抽象不处理“管理”缓存内容的特定语义和细节(例如大小、驱逐或过期策略)。所以所有这些设置都必须在缓存提供者级别定义(ehcache、hazelcast、infinispan..)。
spring缓存的默认实现是一个简单的ConcurrentHashMap。
【讨论】:
ConcurrentMapCache,因此缓存提供程序是 spring 核心)。要设置这些设置,您必须直接在缓存实现中定义它们。所以在抽象级别什么都没做;-)
We can add our own expiry and max limit as follows :
public CacheManager cacheManager() {
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() {
@Override
protected Cache createConcurrentMapCache(final String name) {
return new ConcurrentMapCache(name, CacheBuilder.newBuilder().expireAfterWrite(7200,
TimeUnit.SECONDS).maximumSize(500L).build().asMap(), false);
}
};
【讨论】: