Tag: 缓存

如何在Java或Python中使用文件系统缓存?

最近在Elasticsearch网站上发表的博客文章讨论了他们新的1.4测试版的function。 我很好奇他们如何使用文件系统缓存: 最近的版本增加了对doc值的支持。 实质上,doc值提供与内存中fielddata相同的function,但它们在索引时写入磁盘。 它们提供的好处是它们占用的堆空间非常小。 Doc值是从磁盘读取的,而不是从内存中读取的。 虽然磁盘访问速度很慢,但doc值会受益于内核的文件系统缓存。 与JVM堆不同,文件系统缓存不受32GB限制的约束。 通过将fielddata从堆转移到文件系统缓存,您可以使用更小的堆,这意味着更快的垃圾收集,从而更稳定的节点。 在此版本之前,doc值明显慢于内存中fielddata。 此版本中的更改显着提高了性能,使其几乎与内存中的fielddata一样快。 这是否意味着我们可以操纵文件系统缓存的行为而不是被动地等待操作系统的影响? 如果是这种情况,我们如何在正常的应用程序开发中使用文件系统缓存? 比如,如果我正在编写Python或Java程序,我该怎么做?

如何使用Tomcat启用静态内容(images,css,js)的浏览器缓存?

如何使用Tomcat启用静态内容(images,css,js)的浏览器缓存? 优选的解决方案是editingspring MVC配置文件或web.xml

在两台服务器之间同步缓存数据的最佳方法

想要在两个服务器之间同步缓存数据。 两个数据库共享同一个数据库,但为了更好的执行数据,我在启动时将数据缓存到Hash Map中。 因此,希望在不重新启动服务器的情况下同步缓存的数据。 (两台服务器同时启动)。 请建议我最好和最有效的方法。

我也需要volatile参考类型的变量吗?

我们经常使用volatile来确保每个Thread都可以看到条件变量。 到目前为止,我看到volatile字段在代码中都是primitive type 。 object字段有这个问题吗? 例如: class a { public String str; public List list; } 如果有一些线程将访问str和list,我必须添加’volatile’吗? 我想每次访问Object都会直接从Heap获取,并且Object不会像原始类型那样被缓存。 是对的吗?

如何实现最低频繁使用(LFU)缓存?

最不常用(LFU)是一种用于管理计算机内存的缓存算法。 该方法的标准特征涉及系统跟踪块在存储器中被引用的次数。 当缓存已满并需要更多空间时,系统将清除具有最低参考频率的项目。 实现最近使用的对象缓存的最佳方法是什么,比如Java? 我已经使用LinkedHashMap实现了一个(通过维护对象被访问的次数)但我很好奇是否有任何新的并发集合是更好的候选者。 考虑这种情况:假设缓存已满,我们需要为另一个缓存腾出空间。 假设在缓存中记录了两个对象,这些对象仅被访问一次。 如果我们知道其他(不在缓存中)对象被多次访问,那么要删除哪一个? 谢谢!

易失性HashMap与ConcurrentHashMap

我有一个缓存类,其中包含一个用于存储缓存项的volatile HashMap 。 我很好奇将volatile HashMap更改为ConcurrentHashMap的后果是什么? 我会获得性能提升吗? 此缓存是只读缓存。 什么是最好的选择? 只是HashMap? 缓存正在一段时间内填充。

群集共享缓存

我正在寻找一个允许我在多个JVM之间共享缓存的java框架。 我需要的是Hazelcast,但没有“分布式”部分。 我希望能够在缓存中添加一个项目,并让它自动同步到另一个“组成员”缓存。 如果可能的话,我希望通过可靠的多播(或类似的东西)来同步缓存。 我看过Shoal,但遗憾的是“分布式状态缓存”似乎不能满足我的需求。 我已经看过了JBoss Cache,但对于我需要做的事情来说似乎有些过分。 我看过JGroups ,它似乎是我需要做的最有前途的工具。 有没有人有JGroups的经验? 如果它被用作共享缓存,最好是? 还有其他建议吗? 谢谢 ! 编辑 :我们正在开始测试以帮助我们在Hazelcast和Infinispan之间做出决定,我很快就会接受答案。 编辑 :由于需求突然变化,我们不再需要分布式地图了。 我们将使用JGroups作为低级信令框架。 谢谢大家的帮助。

使用Hadoop分布式缓存时出现FileNotFoundException

这次有人应该放心,我正在努力使用分布式的cahe来运行我的代码。 我已经在hdfs上的文件,但当我运行此代码时: import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.Raster; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import org.apache.hadoop.filecache.*; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import java.lang.String; import java.lang.Runtime; import java.net.URI; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; public class blur2 […]

使用滑行时删除缓存

我知道这是一个非常基本的问题。 我试图找到众多解决方案,但我无法理解它们。 我想要的是 将图像上传到服务器并作为回报我正在获取URL但问题是在使用此URL设置图像时,设置了旧图像。 发生这种情况是因为滑行正在使用旧缓存并且不更新缓存。 怎么解决这个问题。 Glide.clear(profilePic); Glide.with(getApplicationContext()) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(true) .transform(new CircleTransform(MainProfile.this)) .into(profilePic); 目前,图片已更改,但当我单击后退按钮并返回此活动时,它会加载旧图像。 像这样从缓存加载图像。 //setting up the profile pic Glide.with(getApplicationContext()) .load(userProfilePicUrl) .asBitmap() .centerCrop() .into(new BitmapImageViewTarget(profilePic) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(MainProfile.this.getResources(), resource); circularBitmapDrawable.setCircular(true); profilePic.setImageDrawable(circularBitmapDrawable); } }); 问题是,当我回到这个活动时,它显示旧图片而不是新图片。

Spring / Hibernate中适当的缓存使用

X项目包括以下部分: 一个。 Spring Data存储库使用不同的方法,例如: @Cacheable(value = “xobjects”, unless = “#result == null”) XObject findByParamA(String paramA); @Cacheable(value = “xobjects”, unless = “#result == null”) XObject findByParamB(String paramB); @CacheEvict(“xobjects”) E save(E entity); 湾 Hibernate也使用“xobjects”缓存。 问题#1由于有两种方法可以将对象添加到缓存中,因此可能是同一对象出现2次的情况。 如何更好地解决这个问题? 例如,使用结果对象中的键。 就像是: key =“#result.id” 问题#2我不想在调用“save”方法时从缓存中逐出所有对象,但我不确定当前的实现是否有效。 “save”方法将xobject作为输入,因此CacheEvict将其用作驱逐的关键,并且我预计不会发生任何事情。 在这里,我相信能够使用与上述魔术键相同的方法会很好。 更新#1实际上我认为我的提案可行,这里有一个示例 – https://github.com/zhangkaitao/spring4-showcase/blob/master/spring-cache/src/main/java/com/sishuok/spring/ service / UserService2.java但我需要先测试它。 稍后会分享结果。