Tag: ehcache

多个线程可以使用相同CacheManager的相同Ehcache对象吗?

我创建了一个Cache对象,它将String作为键存储,并将序列化对象存储为值。 Cache(String—>Object) 我试图运行三个Akka线程,以同步的方式检索和写入相同的Ehcache对象。 Thread 1- synchronized (LockForEhcache){ serializedObj = cachename.get(“key”); //— this returns an Object } //modify the serializedObj here…. //Again store the modify Object in the Cache synchronized (LockForEhcache){ cachename.clear(); cachename.put(“key”,serializedObj); Thread 2- synchronized (LockForEhcache){ serializedObj = cachename.get(“key”); //— this returns null } Thread 3- synchronized (LockForEhcache){ serializedObj = cachename.get(“key”); //— this returns null […]

EhCache:简单程序不起作用

我是EhCache的新手,并且正在实现分布式缓存服务。 我正在尝试简单的程序,但无法解决错误。 我能够将数据存储到缓存中,但无法检索它。 这是我为测试编写的两个简单程序。 package com.db.tests; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; public class TestCachePut { public TestCachePut() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { CacheManager cache= CacheManager.create(“E:/ehcache-2.6.2/ehcache.xml”); Cache caches = cache.getCache(“cache1”); Element element= new Element(“testKey”, “inserted to cache”); caches.put(element); System.out.println(“Put in to cache”); […]

多级进程内缓存的更好选择是什么?

在我的spring启动应用程序中,我需要实现进程内多级缓存以下是需要缓存的数据示例: 客户名称(密钥,字符串) – 数据实体名称(密钥,字符串) – config-1(值,JSONObject) – config-2(值,JSONObject) 我计划有几百个客户条目,每个条目最多有一百个“配置”JSONObjects 我正在寻找ehcache: Cache cache = manager.getCache(“sampleCache1”); Element element = new Element(“key1”, “value1”); cache.put(element); 在这种情况下,我会用“Customer_Name”代替“key1”,用“My Customer”代替“value1”,但是我需要构建一个层次结构: customer -data entity -config 我不知道如何用ehcache做到这一点。 我也不确定我是否有更好的选择。 有没有人用ehcache或任何其他库实现这样的多级分层缓存?

如何在spring mvc中使用ehcache和hibernate

我是spring-mvc的新手,希望在hibernate中集成ehcache作为二级缓存。 我按照本教程ehcache现在我的hibernate.xml中的条目如下: true ehcache.xml true ehcache.xml中的条目如下: 我们遵循mvc模型,在模型中我定义了annootation @Entity @Cache(usage=CacheConcurrencyStrategy.READ_ONLY, region=”department”) 现在问题是如何在服务层中开始使用此缓存。 我没有在我的项目中创建hibernateUtil.java。 我们正在使用基于web的spring-hibernate mvc应用程序。 现在如何开始,我没有得到。

使用hhnate的ehcache阻止装饰器

我正在使用带有hibernate的ehcache,我想使用阻塞或SelfPopulating缓存来避免http://ehcache.org/documentation/constructs-0_5.html#mozTocId722946中出现的问题 需要进行昂贵的操作,例如渲染大型网页需要30秒。 该页面在5分钟之前不会被视为过时。 该页面受到非常严重的打击,每5分钟平均每分钟打20次。 我是否必须以编程方式执行此操作,因为http://ehcache.org/documentation/cache_decorators.html建议或是否有声明(以xml)方式执行此操作? 非常感谢

java.lang.NullPointerException Hibernate与Ehc​​ache一起使用

我将Hibernate 4.1.2与Ehcache 2.4.3一起使用(在下载hibernate时与hibernate一起发布)。 我的hibernate.cfg.xml: com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://localhost:1433;databaseName=Stock_indices xxx xxx true org.hibernate.dialect.SQLServerDialect update 5 20 300 50 30 true true org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory ehcache-entity.xml ehcache-entity.xml: mapping.xml 但是,我得到了这个例外: java.lang.NullPointerException at org.hibernate.cache.ehcache.internal.util.HibernateUtil.loadAndCorrectConfiguration(HibernateUtil.java:64) at org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory.start(SingletonEhCacheRegionFactory.java:91) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:281) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) ………… 看来hibernate无法加载配置? 我该如何解决这个问题? (serlvet在没有使用Ehcache的情况下工作正常)。 我的servlet类: package stockdataservlet; import java.io.IOException; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; […]

如何让Ehcache为无限高速缓存保持堆大小字节数统计?

我正在使用Ehcache(版本2.7.1)并且想要定期检索统计信息,例如缓存中的元素数量和缓存大小(以字节为单位)。 我net.sf.ehcache.statistics.StatisticsGateway.getLocalHeapSizeInBytes()的问题是使用net.sf.ehcache.statistics.StatisticsGateway.getLocalHeapSizeInBytes() (通过调用net.sf.ehcache.Ehcache.getStatistics()检索的StatisticsGateway)需要很长时间才能生成15000个元素总大小约为536MB。 在我本地计算机上的一个示例中,获取此统计信息花了超过21秒。 在我经历了这个之后,我想,“如果需要很长时间才能给出堆大小统计数据,那么maxBytesLocalHeap缓存设置如何在世界上运行?” 我的缓存(如下所示)未设置maxBytesLocalHeap ,而是设置maxElementsInMemory设置。 所以,我决定使用maxBytesLocalHeap设置而不是瞧,现在需要大约1ms来获取统计数据。 因此,如果缓存不使用maxBytesLocalHeap设置,Ehcache似乎很可能不会保存堆大小的统计信息。 相反,它为我为该统计数据进行的每次通话一次又一次地计算每个对象的大小。 我想要这些统计数据,我只是不想将它们作为驱逐政策的一部分。 所以我然后尝试设置statistics=”true” ,但是我仍然没有更快地获得我的堆大小统计数据。 我已经尝试搜索Ehcache文档以找到答案,甚至查看了ehcache.xsd以查找我可能遗漏的设置,但我没有发现任何相关内容。 有没有人知道如何在不使用maxBytesLocalHeap缓存设置的情况下让Ehcache保持堆大小统计信息?

如何在没有服务器重启的情况下清除ehcache

虽然我猜它极不可能 – 但有没有办法在不重新启动服务器的情况下清除ehcache? 我需要清除缓存以进行一些测试 – 我无法更改代码,也无法多次重启服务器。 PS:我正在使用apache-tomcat-5.5.25请让我知道。 谢谢,psvm

ehcache hibernate 4

在我的应用程序中,我使用hibernate-core-4.1.8 jar并希望将ehCache作为二级缓存。 我目前使用的jar是ehcache-core-2.5.0。 我把它放在我的WebContetn / WEB-INF / lib文件夹中,并将它放在类路径中。 我的hibernate.cfg.xml看起来像这样: …. org.hibernate.cache.ehcache.EhCacheRegionFactory true true 放在JavaResources / src文件夹中的ehcache.xml: 运行我的应用程序时,找不到类org.hibernate.cache.ehcache.EhCacheRegionFactory: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.cache.ehcache.EhCacheRegionFactory at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138) at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:444) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:275) at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748) at creator.controllers.MyFactory.(MyFactory.java:18) at creator.controllers.SchoolDAO.getList(SchoolDAO.java:98) …..

Ehcache – 在数据不存在时使用SelfPopulatingCache

我正在使用EhCache的装饰器SelfPopulatingCache并且当缓存尝试加载新条目时出现问题,但它不存在(即它在数据库中不存在)。 因此缓存会将一个null值放入缓存中,以取消阻止密钥上的任何其他获取,但随后下一个线程将执行相同的数据库调用,因为它从缓存中收到“null”。 这意味着它认为需要加载条目 – 即使实际上它是空的,因为数据不存在于任何地方。 我觉得我做错了什么。 (伪代码) Value v = cache.get(key); // multiple threads will block here if (v == null) cache.put(key, getValueFromDB()); // this might put a null value 我目前的解决方案是不放置null,而是放置占位符Object并检查它。 Value v = cache.get(key); if (v == null) cache.put(key, getValueFromDB()); else if (v == NOENTRYOBJECT) return null; else return v; 思考?