当前位置: 首页 > 知识库问答 >
问题:

Ehcache不删除缓存项

公孙向荣
2023-03-14

主要问题是EHCAHCE2.6.2是否基于ehcache配置驱逐过期元素;还是我必须按程序驱逐?

在阅读了文档的各个部分(数据寿命和缓存大小)之后,我们将当前配置设置为使用TTI/TTL和CacheManager级别MaxBytesLocalHeap=1024M。在设置了这个之后,我希望ehcache只能使用1GB的堆空间进行缓存,但是从测试(和prodcution)中,我们总是看到JVM堆已经满了(在我们的例子中是2GB)

Ehcache似乎不遵守我们设置的maxBytesLcoalHeap设置。当然,除非我(很可能)不明白这个设置实际上在做什么。

更新

ehcahce配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>

 <cache name="storeCache" 
   maxElementsInMemory="2500"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="86400"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="courseCache" 
   maxElementsInMemory="100000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="43200"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="mtcIdCache" 
   maxElementsInMemory="500000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="3600"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="catentryCache" 
   maxElementsInMemory="500000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="3600"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="priceCache" 
   maxElementsInMemory="500000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="300"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="inventoryCache" 
   maxElementsInMemory="500000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="300"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="attributeCache" 
   maxElementsInMemory="500000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="300"
   statistics="true"> 
   <persistence strategy="none" />
</cache>

<cache name="partnerCache" 
   maxElementsInMemory="10000"
   memoryStoreEvictionPolicy="LFU"
   eternal="false"
   timeToLiveSeconds="86400"
   statistics="true"> 
   <persistence strategy="none" />
</cache>
</ehcache>

**第二次更新**

使用DynaTrace,我们能够确定这是Spring集成的一个问题。具体地说,SimpleMessageStore似乎在保留对象并填充!

阅读文档时,我似乎应该使用MessageReaper,但即使在配置中包含了这一点,我也看到了同样的问题。我应该查看SimpleMessageStore的容量设置吗?

共有1个答案

步建茗
2023-03-14

在您的ehcache配置中,我没有看到任何内存限制。如果要指定内存限制,则必须在ehcache标记上设置“MaxBytesLocalHeap”属性。

有关详细信息的Ehcache文档:http://Ehcache.org/documentation/configuration/cache-size#mixed-sizing-configurations。

 类似资料:
  • del 清空指定缓存 await this.app.redis.del('name') flushall 清空所有缓存 await this.app.redis.flushall() lpop 从数组最左边删除一项 await this.app.redis.lpop('userList') rpop 从数组最右边删除一项 await this.app.redis.rpop('userList')

  • 我正在将spring 4.1与ehcache一起使用。我可以用整数键缓存字符串值,但每当我尝试缓存对象时,它都会失败,不会出现任何错误。我保存在缓存中的模型(POJO)确实实现了hashcode、equals和tostring函数。 ehcache配置如下 Spring配置如下所示 我要缓存的类和方法 如果我将getPerson方法的返回值从Party对象替换为String,它就会工作。有什么想法

  • 我有一个spring/hibernate项目,我试图通过ehcache和terracotta将二级缓存添加到hibernate。一切似乎都很好,我甚至可以在terracota控制台中看到我试图缓存的实体的条目。但根据数据库的统计数据和日志,根本没有缓存任何内容! 负载命中率是0%,负载统计也是0。我做错了什么? 这是我所做的,我通过maven添加了所需的罐子。 更改了我的Hibernate属性以启

  • 我使用Drupal 7最新的开发版本。 我已经安装了清漆和过期模块并设置它们。它们工作得很好,但是我有一个关于从清漆中删除缓存的问题。 问题是如何只删除索引(主页)页面的清漆缓存,而不删除其他页面的缓存。我看了清漆日志,发现每次Drupal执行命令时,整个清漆缓存都被删除了 此命令由varnish模块或expire模块执行,它表示删除主页(索引)页的缓存。但正如我看到的,它正在删除varnish中

  • 问题内容: 我正在使用二级缓存和查询缓存。我可以知道如何以编程方式清除所有缓存吗? 问题答案: 清除会话缓存使用 要清除二级缓存,请使用此代码段

  • 当我调用我用注释的方法时,我知道缓存没有被使用,因为我在方法内部进行了打印,如果使用了缓存,就不应该打印它。 在日志中,我知道缓存正在初始化 我应该提到调用该方法的方法是常规Java