Tag: 缓存

我应该使用哪个Java集合来实现线程安全缓存?

我希望实现一个简单的缓存,而不需要做太多的工作(当然)。 在我看来,其中一个标准的Java集合应该足够了,只需要一些额外的工作。 具体来说,我正在存储来自服务器的响应,密钥可以是请求URL字符串,也可以是从URL生成的哈希码。 我原本以为我可以使用WeakHashMap ,但看起来这种方法迫使我管理我想要保留的对象,而且我没有用强引用管理的任何对象都会立即被扫除。 我应该尝试一下SoftReference值的ConcurrentHashMap吗? 或者那些也会被积极地清理干净? 我现在正在查看LinkedHashMap类。 通过一些修改,它看起来很有希望用于MRU缓存。 还有其他建议吗? 无论我使用哪个集合,我应该尝试手动修剪LRU值,还是可以信任VM偏向回收最近访问的对象? 仅供参考,我正在开发Android,所以我不想导入任何第三方库。 我正在处理一个非常小的堆(16到24 MB),因此VM可能非常渴望回收资源。 我认为GC会很有侵略性。

将EhCache磁盘库内容加载到内存中

如EhCache文档中所述: 实际上,这意味着持久的内存缓存将启动磁盘上的所有元素 。 […]因此,Ehcache设计在启动时不会将它们全部加载到内存中,而是根据需要懒洋洋地加载它们。 我想内存缓存启动将其所有元素都存储在内存中,我该如何实现呢? 原因是我们的网站对缓存执行了大量访问,因此我们第一次访问网站时响应时间非常短。

jOOQ和缓存?

我正在考虑从Hibernate转移到jOOQ,但我不确定如果没有缓存我是否可以做到。 Hibernate有一级和二级缓存 。 我知道jOOQ确实支持重用预准备语句 。 如果我使用jOOQ,我是否必须自己处理缓存?

通过Javascript缓存与在Server中设置HTTPResponse头之间有什么区别?

在前端,我使用AngularJS“$ resource”作为GET请求,在后端我使用SpringMVC公开我的方法Restful方式。 现在我想只缓存一些我的GET请求。 我注意到有一些方法可以像使用$ cacheFactory一样。 或类似的东西: return { Things: $resource(‘url/to/:thing’, {}, { list : { method : ‘GET’, cache : true } }; 请注意,这也可能是一个带有一些缓存参数的简单ajax调用,而不是必须使用angularJS。 所以不是在客户端上使用这种方法,我不知道它可以在服务器上完成,只需通过Java在Response头中设置缓存,有些事情如下: response.setHeader(“Cache-Control: max-age=2592000”); 这两种方法有什么区别? 应该采用哪种方法? PS这个问题不是服务器端缓存与客户端缓存问题,我只需在服务器中设置HTTPResponse头即可。

用于Google App Engine的Memcache(Java)是全局缓存吗?

我是Google App Engine的新用户,过去几天我花了很多时间使用GAE的Memcache来存储数据。 根据我的初步调查结果,似乎GAE的Memcache不是全球性的? 让我进一步解释。 我知道GAE的不同请求可能由不同的实例提供(实际上这似乎经常发生)。 正是出于这个原因,我使用Memcache来存储一些共享数据,而不是静态Map。 我想(也许是错误的)这是使用分布式缓存的重点,以便任何节点都可以访问数据。 另一个明确的可能性是我做错了什么。 我已经尝试了JCache和低级Memcache API(我正在编写Java,而不是Python)。 这是我正在做的检索缓存: MemcacheService cache = MemcacheServiceFactory.getMemcacheService(); 部署之后,这是我检查的内容(通过我的应用程序日志): 初始请求由特定节点提供,并且数据存储在上面检索的高速缓存中。 新的几个请求检索相同的缓存,数据就在那里。 当一个新节点被生成来提供请求时(从日志中我知道发生这种情况是因为GAE记录了“此请求导致为您的应用程序启动了一个新进程……”),将检索缓存并且是EMPTY ! 现在我也知道无法保证Memcache中的数据有多长,但从我的发现来看,当diff实例尝试访问缓存时,数据就会消失。 这似乎违背了分布式全局缓存的整个概念吗? 希望有人能够确切地澄清这应该如何表现。 如果Memcache不是全局的并且每个服务器实例都有自己的副本,那么为什么甚至使用Memcache? 我可以简单地使用静态HashMap(我最初做过,直到我意识到由于不同的实例服务于我的请求它不会是全局的)。 帮帮我?

Hibernate NoCacheRegionFactoryAvailableException

我得到了一个奇怪的Hibernateexception,我无法解释。 它告诉我,我正在使用二级缓存,但在hibernate.cfg.xml没有指定二级缓存。 这是例外: org.hibernate.cache.NoCacheRegionFactoryAvailableException: Second-level cache is used in the application, but property hibernate.cache.region.factory_class is not given, please either disable second level cache or set correct region factory class name to property hibernate.cache.region.factory_class (and make sure the second level cache provider, hibernate-infinispan, for example, is available in the classpath). at org.hibernate.cache.internal.NoCachingRegionFactory.buildEntityRegion(NoCachingRegionFactory.java:69) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:348) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769) […]

Java – HttpUrlConnection每次都返回缓存的响应

我正在尝试收集Roblox货币兑换的统计数据进行分析。 因此,我需要最新的数据而不是缓存的结果。 但是,似乎无论我做什么,结果仍然是缓存的。 似乎最直观的选项setUseCaches()没有效果,并且手动将头设置为Cache-Control: no-cache似乎也不起作用。 我使用Fiddler2检查了Cache头,看到它的值是Cache-Control: max-age=0 ,但它似乎也没有改变程序的行为。 以下是相关的代码: url: private final static String URL = “http://www.roblox.com/my/money.aspx#/#TradeCurrency_tab”; GET请求: URLConnection socket = new URL( URL ).openConnection( ); socket.setUseCaches( false ); socket.setDefaultUseCaches( false ); HttpURLConnection conn = ( HttpURLConnection )socket; conn.setUseCaches( false ); conn.setDefaultUseCaches( false ); conn.setRequestProperty( “Pragma”, “no-cache” ); conn.setRequestProperty( “Expires”, “0” ); conn.setRequestProperty( “Cookie”, “.ROBLOSECURITY=” […]

用于监视Hibernate缓存使用情况的工具

是否有任何工具可以监控Hibernate二级缓存的使用? 我知道我可以使用Hibernate API来检索这些信息。 但是当我的应用程序没有读取信息本身时,我该怎么办?我无法修改它? 有没有办法从应用程序外部读取缓存统计信息?

用番石榴缓存

什么Guava类适合线程安全的缓存? 我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧? 我看到ConcurentLinkedHashMap的某个地方,是不是要走的路? 它已经在最近发布了吗? 对不起请问混乱的方式…… 更新 这个问题很老了,通过他的回答可能是浪费时间。 很久以来,就有了一个CacheBuilder 。

Java缓存和动态更新

我需要在servlet启动时从数据库“预加载”一些数据。 所以我想创建一些缓存,例如使用HashMap或类似的同步版本。 我还需要更新数据库更新更改的缓存。 所以我想添加一些“听众”。 我的问题是:这是以某种方式提供还是我必须实际实现它? 如果是的话,哪种设计模式最适合这里? 更新: 没有使用JPA或ORM。 但spring可用