java - 使用 JCache 配置 API 限制缓存大小

标签 java caching spring-cache jcache

我正在使用 JCache API 在我的应用程序中配置缓存,该应用程序将 spring 缓存与 Ehcache 3 结合使用。

cacheManager.createCache("users", new MutableConfiguration<String, User>()
                    .setStoreByValue(false)
                    .setManagementEnabled(true)
                    .setStatisticsEnabled(true)
                    .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.TEN_MINUTES)));

如何将缓存大小限制为 50 个条目?通过 Ehcache XML 配置很容易做到这一点,但如果有一种方法可以使用 JCache 配置 API 来控制它,我更愿意使用它。

最佳答案

不幸的是,限制大小超出了标准的范围。为此,您始终需要特定于供应商的配置。

我自己对此并不满意,并且在一些用例中我想在程序中使用标准 API 设置大小限制。但是,也有正当理由将其排除在标准之外:

大小限制是什么意思?缓存需要遵循哪些确切的语义?是否可以为所有缓存定义有用的语义?例如,对于分布式缓存,根本很难确定缓存中的条目数。

有不同的概念来限制缓存大小。一些缓存允许设置字节大小限制。

对于非平凡的应用程序,您不想在代码中编写大小。大小是配置,应该在某个独立且易于管理的地方。外部配置也不在标准范围内。众说纷纭,没有标准的配置方式。

关于java - 使用 JCache 配置 API 限制缓存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37289599/

相关文章:

java - 2 个 kafka 消费者使用不同的 SSL 配置读取 2 个不同的主题

java - 如何在 java/oracle ADF 中从整数转换为 oracle.jbo.domain.Number

android - 如何在 1 小时后自动清除应用程序的缓存

java - GemFire 条目的生存时间未使用 spring-cache 设置

java - 如何让单个线程而不是整个程序等待?

git - 在 git scm 中撤消 "git checkout HEAD foo.c"

java - 如何通过 Spring Boot 从 Redis 缓存中获取所有 key ?

spring - 如何使用 Spring Boot 禁用 Redis 缓存?

Spring 缓存: force update cache based on condition

java - 在 IntelliJ 中启用 Java 代码块折叠