草庐IT

LFU缓存

全部标签

java - HashMap 缓存中的同步

我有一个网络应用程序,人们可以在其中请求资源。此资源使用同步HashMap进行缓存以提高效率。这里的问题是当两个不同的请求同时到达同一个未缓存的资源时:检索资源的操作会占用大量内存,因此我想避免对同一个资源多次调用它。有人可以告诉我以下代码片段是否存在任何潜在问题吗?提前致谢。privateMapresources=Collections.synchronizedMap(newHashMap());publicvoidrequest(Stringname){Resourceresource=resources.get(name);if(resource==null){synchroni

Java 玩! 2 - 缓存.remove

http://www.playframework.org/documentation/2.0.2/JavaCacheAtm我找不到Cache.remove方法。我想它还没有实现?那么我现在需要使用第3方库缓存解决方案,例如memcached。//2.0finalCache.set("item.key",null,0)//laterCache.remove("item.key") 最佳答案 虽然完全不清楚,但可以理解为:因为Play2.0final删除缓存条目使用:Cache.set("item.key",null,0);(它会为it

春季MVC-配置eHcache-不缓存

我正在尝试将EHCache与我的JavaSpringMVCWeb应用程序集成在一起。我遵循以下文章的说明:https://dzone.com/articles/implementing-ehcache-using。我已经添加了以下依赖性pom.xml文件:net.sf.ehcacheehcache2.9.0我的ehcache.xml如下:我有以下条目root-context.xml:我有一种我想启用ehcache的方法:@Cacheable(value="swcmRestData",key="url")publicTgetEntity(Stringurl,java.lang.Classgt)t

java - 缓存远程 EJB 3.0 引用

我在想如何才能节省通过jndi查找远程ejb引用的时间。我有一个应用程序需要非常快地运行,但它还必须调用远程ejb,这会减慢它的速度。所以我的解决方案是这样的:我采用了apachecommons-pool库并将其StackObjectPool实现用于我的远程ejb引用缓存。privatestaticfinalObjectPoolpool=newStackObjectPool(newRemoteEjbFactory());工厂看起来像这样:publicstaticclassRemoteEjbFactoryextendsBasePoolableObjectFactory{@Override

java - 使用 Supplier Java 8 进行缓存

据我所知,此方法会记住(缓存)作为参数传递的供应商的值。据我了解,它的行为类似于单例模式。谁能解释它是如何工作的?publicstaticSuppliermemoize(finalSuppliervalueSupplier){finalListmemoryList=newArrayList();return()->{if(memoryList.isEmpty()){memoryList.add(valueSupplier.get());}returnmemoryList.get(0);};}用法如下:SuppliercachedValue=memoize(()->someClassOb

java - 缓存方法导致不可变对象(immutable对象)

假设我有一个表示复数的简单接口(interface),它的实例是不可变的。为了简洁起见,我省略了明显的plus、minus、times和divide方法,它们只会创建并返回一个新的不可变实例。publicinterfaceComplex{doublereal();doubleimaginary();doubleabsolute();doubleangle();}现在的问题是,将其实现为不可变类的最佳方法是什么?最简单直接的“我只在性能出现问题时才关心它”的方法是将实部和虚部存储为最终字段,并在每次调用这些方法时计算绝对值和角度。这使类保持小而简单,但显然最后两个方法每次都返回相同的结果

java - 如何使用 spring 缓存抽象返回条目数

我正在使用spring缓存抽象来缓存服务层中的对象。这适用于简单的get/put操作,如下所示:staticprivatefinalStringcacheName="messages";@CacheEvict(value=cacheName,key="#message.id")publicvoiddeleteMessage(Messagemessage){...}@Cacheable(value=cacheName,key="#id")publicMessagefindMessage(Longid){...}@CachePut(value=cacheName,key="#message

java - 如何防止多次同时加载非缓存值?

如何防止以高效的方式同时多次加载缓存中不存在的值?一个典型的缓存用法是下面的伪代码:Objectget(Objectkey){Objectvalue=cache.get(key);if(value==null){value=loadFromService(key);cache.set(key,value);}returnvalue;}问题:在从服务(数据库、WebService、RemoteEJB或其他任何东西)加载值之前,可能会同时进行第二次调用,这将使值再次加载。比如我在缓存用户X的所有item,而这个用户经常被查看,有很多item,那么很有可能会同时调用他所有item的load,

java - 正如 Joshua Bloch 在有效 Java 中所建议的那样,缓存哈希码如何在 Java 中工作?

我有以下来自JoshuaBloch的effectivejava的代码(第9项,第3章,第49页)Ifaclassisimmutableandthecostofcomputingthehashcodeissignificant,youmightconsidercachingthehashcodeintheobjectratherthanrecalculatingiteachtimeitisrequested.Ifyoubelievethatmostobjectsofthistypewillbeusedashashkeys,thenyoushouldcalculatethehashcode

Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...

引言早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。从上面的描述中,主要存在两个问题:①单体结构的部署方式无法承载日益增长的业务流量。②当后端节点宕机后,整个系统会陷入瘫痪,导致整个项目不可用。因此在这种背景下,引入负载均衡技术可带来的收益:系统的高可用:当某个节点宕机后可以迅速将流量转移至其他节点。系统的高性能:多台服务器共同对外提供服务,为整个系统提供了更高规模的吞吐。