问题标签 [ehcache-2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ehcache 2:SelfPopulatingCache 丢失刷新
我必须使用 ehache 2(用 2.9.0 和 2.10.4 测试)和SelfPopulatingCache
. 如果我overflowToDisk="true"
在ehcache.xml
. 不写入硬盘,一切都很好。
在开始输出总是:
大约 50 次刷新后,输出变为:
原因是方法getKeys()
上的refresh()
方法返回一个空集合。
例子
java - 分布式 ehcache 更新操作如何在复制缓存上工作
要求 :
我想从数据提供者获取所有帐户组成员资格详细信息,并准备帐户缓存以列出关联组。我需要为 4000 组准备一个缓存,并且 api 的响应太慢,因此我选择了多服务器环境并将数据保存到分布式 Ehcache 中。
当前设计:
我有 4 台服务器
步骤1:
- 服务器 1 将组数分成 4 个相等的部分。
- 因此每台服务器可以获取 1000 个组的数据。还创建一个分布式 ehcache 用于存储帐户到组关联。
- 在其他 3 台服务器上复制此缓存。(其他服务器等到步骤 1 完成)
第2步 :
- 所有 4 台服务器都盯着从数据提供者那里获取数据并将其放入分布式缓存中。
- 服务器可以将相同键的数据更新到缓存中。
我对上面的设计有一些疑问
- 据我了解,每台服务器都有自己的缓存复制副本,所以当我更新缓存的任何元素时,它是否会在本地复制副本上更新?
- 如果服务器 1 更新缓存中的元素,其他服务器如何获取更新的值?
- 如果通过 RMI 为每个更新操作在所有服务器上复制更新的缓存,那么如果服务器 1 更新缓存中的一个元素并且在此更新复制到另一个服务器之前,服务器 2 也会更新相同的元素会发生什么情况。
spring - 为什么 Spring Boot/EhCache 不使用指定的配置文件?
我正在尝试在 Spring Boot 2 应用程序中启用 EhCache 3 缓存,并且据我所知,我已经正确设置了它,但是缓存只是......不起作用,我没有得到任何关于原因的信息。
我已经添加到我的 Maven POM 中:
我添加了一个@EnableCaching
注释。我已经指定了配置,我正在使用bootstrap.yml
:
但以防万一我也将spring.cache.jcache.config
版本放在属性文件中。
我已经写了一个基本src/main/resources/ehcache.xml
文件...
最后,我设置了一个方法,@Cacheable
但是当我使用“找不到名为...的缓存”调用它时它会出错
从字面上看,我写的东西一点都不重要ehcache.xml
。我可以粘贴 Lorem Ipsum 文本而不是 XML,并且没有错误或指示它甚至打开了文件。
Spring Boot 本身似乎已经找到了 JSR 107 自动配置的适当先决条件:
我试过回到 EhCache 2,所以我替换org.ehcache
为net.sf.ehcache
,将我的 YML 切换为ehcache
而不是jcache
并删除javax.cache
。这会将其放入我的自动配置报告中:
但是我仍然没有任何可用的缓存。为什么 Spring 的自动配置机制会提到它找到了 EhCache 2 配置文件但实际上没有配置任何东西?我是否还需要在报告中查找其他一些自动配置类,例如 GenericCache、CacheConfiguration 等?
我看不到任何迹象表明它试图做任何事情来启动缓存子系统,读取我的配置,做任何事情。
与自动配置一样方便,当它不想做这件事时,它会令人沮丧地告诉我为什么它决定让我失望,所以我真的可以使用一些帮助来弄清楚如何从事情中梳理出这些细节。
我错过了什么?我可以调试什么以及在哪里可以找出为什么它忽略了我试图告诉它的 XML 配置?我尝试在 jcache 设置周围向 Spring CacheProperties 添加一些断点,但是当我附加调试器时它没有命中它们。
maven - Grails 2.4.5 错误 net.sf.ehcache.CacheException:javax.management.MalformedObjectNameException 属性值部分中的无效字符“:”
运行 Grails 2.4.5 项目时出现以下错误(完整堆栈跟踪)
我不确定是什么导致了错误,我得到了一个成功的“maven clean/package/install”。但是,在执行“grails compile”时,我从 cache-ehcache 插件中收到了一个不推荐使用的警告(如下所示),我假设这可能是我收到此错误的原因,但不确定如何解决它。
我会尝试看看是否有该插件的更高版本。到目前为止,我大部分时间都被限制在一个 nexus 镜像存储库中,所以我无法找到更高版本来测试。
我的 pom.xml 中有示例依赖项
根据一个未解决的问题https://github.com/grails-plugins/grails-cache-ehcache/issues/41,这可能是一个错误,但没有提供解决方案或解决方法。
我正在从 Grails 2.2.0 升级到 2.4.5,我更新了 Datasource.groovy 以指出正确的 hibernate4 ehCache 类:
}
配置.groovy:
我试图了解这MalformedObjectNameException: Invalid character ':' in value part of property
是从哪里来的,因为该项目没有配置任何 ehcache,它只是使用了缓存插件中的一些类。下面是一个示例缓存服务实现:
GrailsEhCacheCache 无法被 IntelliJ 识别 GrailsCacheManager 无法被 IntelliJ 识别
更新:用于创建 EHcache 的自定义实用程序方法
java - Ehcache DiskStore 对象无限增长
EhCache 版本:2.8.4
JVM 版本:11.0.7
缓存配置:
我注意到当使用溢出到磁盘的缓存时(如在上面的配置中),内存中有一个 DiskStore 对象似乎无限增长。我认为限制磁盘使用的条目数量maxEntriesLocalDisk
可能会阻止这种情况发生,但它似乎没有帮助。
最近我从我的应用程序中查看了一个堆转储,我可以看到 DiskStore 引用了超过 17M 的缓存键,尽管maxEntiresLocalDisk
值设置为 2M。这消耗了超过 2.5GB 的内存,这并不理想,因为应用程序只分配了 4GB 的堆。
有没有办法限制 DiskStore 引用了多少缓存键以防止它变得如此之大?我正在考虑Cache.evictExpiredElements()
制定某种时间表,看看是否有帮助,但希望maxEntriesLocalDisk
能避免这样做。我实际上确定条目是否已过期,因此可能evictExpiredElements
无济于事。