标签: ehcache

寻找java.util.Map的替代品

问题

关注这个问题,似乎基于文件或磁盘的Map实现可能是我在那里提到的问题的正确解决方案.精简版:

  • 现在,我已经Map实现了一个ConcurrentHashMap.
  • 条目以相当固定的速率不断添加到其中.稍后详情.
  • 最终,无论如何,这意味着JVM耗尽了堆空间.

在工作中,(强烈)建议我使用SQLite解决这个问题,但在询问上一个问题之后,我认为数据库不是这项工作的正确工具.所以 - 让我知道这听起来有多疯狂 - 我认为更好的解决方案是Map存储在磁盘上.

不好的主意:自己实现这个.更好的主意:使用别人的图书馆!哪一个?

要求

必备:

  • 自由.
  • 持久性.数据需要在JVM重启之间保持不变.
  • 某种可搜索性.是的,我需要能够检索这些数据以及将其丢弃.基本结果集过滤是一个加号.
  • 与平台无关.需要在Windows或Linux计算机上进行生产部署.
  • 可以清除.磁盘空间是有限的,就像堆空间一样.我需要摆脱n几天前的条目.如果我必须手动执行此操作,这不是什么大问题.

尼斯对富人:

  • 使用方便.如果我能在本周末完成这项工作,那就太好了.
    更好的是:一天结束.这将是非常,非常巨大的,如果我能一个JAR添加到我的类路径,改new ConcurrentHashMap<Foo, Bar>();到new SomeDiskStoredMap<Foo, Bar>();
    和完成.
  • 体面的可扩展性和性能.最坏的情况:新的条目(平均)每秒增加3次,每秒,每天,每天.但是,插入并不总是顺利发生.可能就是(no inserts for an hour)这样(insert 10,000 objects at once).

可能的解决方案

java caching hadoop berkeley-db ehcache

13
推荐指数
2
解决办法
3281
查看次数

ehcache统计信息不正确:命中+未命中== 0

我有一个问题,net.sf.ehcache.CacheManager出现返回无效的统计信息.

我正在使用ehcache-core v2.3.2(最新版本)ehcache-spring-annotations.

问题是,getMemoryStoreObjectCount返回1个对象同时兼具getCacheHits和getCacheMisses返回0.应该是总计数hits + misses吗?

下面的单元测试应该说明问题(它应用于空数据库):

@Test
public void testCache() {
    Entity e = ..
    dao.storeEntity(e);
    dao.getEntity(e);
    assertEquals(1, cache.getStatistics().getMemoryStoreObjectCount()); // ok
    assertEquals(0, cache.getStatistics().getCacheHits()); // ok
    assertEquals(1, cache.getStatistics().getCacheMisses()); // fails due to 0

}
Run Code Online (Sandbox Code Playgroud)

为了完整性,我包括所有必要的配置:

Spring配置

<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

ehcache.xml中

<ehcache>
     <defaultCache eternal="false" maxElementsInMemory="1000"
        overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
        timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
</ehcache>
Run Code Online (Sandbox Code Playgroud)

道

@Cacheable(keyGenerator=@KeyGenerator(name="StringCacheKeyGenerator")) …
Run Code Online (Sandbox Code Playgroud)

java spring annotations hibernate ehcache

13
推荐指数
3
解决办法
6400
查看次数

EHCache与Terracotta Vs Infinispan

我们正在新项目的设计阶段工作,我们需要决定缓存框架.我们需要决定是否将EHCache与Terracotta或Infinispan一起用于缓存要求?任何人都可以向我提供EHCache和Infinispan的优缺点吗?

提前致谢.

terracotta ehcache infinispan

13
推荐指数
2
解决办法
1万
查看次数

Spring MVC的ehcache或spring cache中最好的Cache实践是什么?

计划在基于Spring网络的应用程序中实现静态数据的缓存机制,任何人都可以解释哪个是最好的以及它是如何工作的?

  • 的Ehcache
  • Spring Cache

java spring spring-mvc ehcache spring-cache

13
推荐指数
1
解决办法
1万
查看次数

使用带有Spring Annotations的ehcache 3(不使用Spring Boot)

我试图让Ehcache 3在不使用Spring引导的情况下使用Spring 4.

这是一个使用Spring Boot的工作示例,但我正在处理一个不使用Spring Boot的现有应用程序.

问题是spring-context-support(添加Spring的缓存注释)要求Ehcache的CacheManager在这个类路径上:net.sf.ehcache.CacheManager

但是,在Ehcache 3中,CacheManager类驻留在另一个类路径上:org.ehcache.CacheManager.

所以,基本上spring-context-support不支持Ehcache 3.你必须直接使用JSR-107注释,而不是Spring提供的注释.

但显然它适用于Spring Boot.也许有一种方法可以使它与标准的Spring应用程序一起工作.这就是我所希望的.我真的想要使用Spring自己的注释而不是JSR-107注释.

spring ehcache spring-boot spring-4 jsr107

13
推荐指数
1
解决办法
8046
查看次数

任何可以限制内存缓存的内存使用的Java缓存,而不仅仅是实例计数?

我正在寻找一个简单的内存(和进程中)缓存,用于查询数据的短期缓存(但短期意义超出请求/响应,即会话边界).EhCache可能会工作,但看起来好像它可能不提供我需要的东西:限制不是缓存的对象数量,而是(大致)限制缓存数据消耗的内存量.

我知道很难在没有序列化的情况下找出给定对象的确切内存使用情况(我想避免在一般情况下因为它的速度慢而无法实现我的用途),而且我自己也不得不提供大小估计.

那么:是否有一个简单的开源java缓存,允许定义缓存对象的"权重",以限制缓存的事物数量?

编辑(2010年11月):对于它的价值,有一个名为Java CacheMate的新项目试图解决这个问题,以及其他一些改进的想法(多级内存中进程缓存)

java caching memory-management ehcache

12
推荐指数
1
解决办法
7742
查看次数

ehcache警告消息"未找到配置"

应用程序启动时我收到了以下警告.

2009-05-13 09:19:41,171 WARN  net.sf.ehcache.config.Configurator - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath:jar:file:/app/java/lib/ehcache-1.1.jar!/ehcache-failsafe.xml  
Run Code Online (Sandbox Code Playgroud)

我在以下url中找到了encache代码.ConfigurationFactory Code

应用程序正在尝试加载ehcache.xml但无法找到该文件,因此它加载了ehcache-failsafe.xml.我想知道这是否会导致应用程序出现任何问题?什么是影响加载ehcache-failsafe.xml?

spring hibernate ehcache

12
推荐指数
2
解决办法
2万
查看次数

NoSQL或Ehcache缓存?

我正在使用Spring/Hibernate/Tomcat和mysql数据库构建Route Planner Webapp,我有一个包含只读数据的数据库,例如总线停止坐标,从不更新的总线时间.我正在尝试让应用程序运行得更快,每次运行应用程序时,它都会对数据库执行大约1000次读取以计算路径.

我已经设置了一个Ehcache,它大大提高了从数据库时间的读取.我现在正在设置terracotta + Ehcache分布式缓存以与多个Tomcat JVM共享缓存.这看起来有点复杂.我已经尝试过memcached,但它的表现并不像ehcache那么快.

我想知道MongoDb或Redis是否更适合.我没有使用nosql的经验,但如果有人有任何想法,我将不胜感激.我需要的是快速访问只读数据库.

mysql hibernate ehcache neo4j nosql

12
推荐指数
2
解决办法
4368
查看次数

如何启用Ehcache的日志记录

在我的Spring + Hibernate项目中,我使用LogBack通过SLF4J 1.6.4进行日志记录.现在,我添加了Ehcache 2.2.0(通过ehcache-spring-annotations-1.1.3).缓存似乎是作为方法工作,使用@Cacheable注释,不再执行,但返回正确的结果.但是,我有兴趣看到Ehcache写的日志.由于Ehcache也使用SLF4J,我想,日志应该写入我的日志文件中.但是,这种情况并没有发生.logback.xml具有以下内容.

 <root level="info">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="ROLLING"/>
</root>
Run Code Online (Sandbox Code Playgroud)

添加以下内容也无济于事

 <logger name="net.sf.ehcache"> 
</logger> 
Run Code Online (Sandbox Code Playgroud)

ehcache.xml中

    <cache name="sampleCache1"
       eternal="false"
       overflowToDisk="true"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"           
       memoryStoreEvictionPolicy="LFU"           
        />
Run Code Online (Sandbox Code Playgroud)

请告诉我克服这个问题.

Ehcache正在使用SLF4J 1.6.1,而我的项目正在使用SLF4J 1.6.4.它会引起任何问题吗?

谢谢

spring ehcache logback slf4j

12
推荐指数
4
解决办法
3万
查看次数

ApplicationEventMulticaster未初始化 - 在多播事件之前调用'refresh'

我正在尝试ehcache为我的应用程序实现但是当尝试调用服务器时,收到以下错误 -

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Thu Apr 16 14:37:53 IST 2015]; root of context hierarchy
    at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:344)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
    at org.springframework.web.servlet.FrameworkServlet.publishRequestHandledEvent(FrameworkServlet.java:1061)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:996)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-mvc ehcache spring-boot

12
推荐指数
2
解决办法
4万
查看次数