小编Mik*_*e W的帖子

使用没有加载功能的guava缓存

我的java应用程序有一个缓存,我想换掉当前的缓存实现并用guava缓存替换它.

不幸的是,我的应用程序的缓存使用情况似乎与番石榴的缓存似乎不起作用的方式相匹配.我想要的是能够创建一个空缓存,使用"get"方法从缓存中读取一个项目,并使用"put"方法将项目存储在缓存中.我不希望"get"调用尝试将项添加到缓存中.

似乎LoadingCache类具有我需要的get和put方法.但我无法确定如何在不提供"加载"功能的情况下创建缓存.

我的第一次尝试是这样的:

LoadingCache<String, String> CACHE = CacheBuilder.newBuilder().build();
Run Code Online (Sandbox Code Playgroud)

但这会导致此编译器错误:不兼容的类型; 没有类型变量的实例K1,V1存在,以便Cache符合LoadingCache

显然我必须传入一个具有"加载"方法的CacheLoader.

(我想我可以创建一个CacheLoader,它有一个"load"方法,只抛出一个Exception,但这看起来有点怪异和低效.这是正确的做法吗?)

java caching guava

26
推荐指数
1
解决办法
9270
查看次数

Google和Yahoo如何替换浏览器状态栏中的URL?

在Google和Yahoo搜索页面上,10个搜索结果链接的网址实际上指向google.com或yahoo.com.URL具有额外的参数,允许google.com或yahoo.com在单击链接时重定向到实际搜索结果.当用户将鼠标悬停在链接上时,搜索结果网址(而不是google.com或yahoo.com网址)会显示在浏览器的状态栏中.

我想知道他们是怎么做到的.

很多年前,这可以通过设置一些设置window.status的javascript来实现,但这似乎不再起作用,正如可靠的跨浏览器设置状态栏文本的方式所解释的那样

我有一个看起来像这样的链接: <a href="http://somedomain.com/ReallyLongURLThatShouldNotBeSeenInTheStatusBar" onmouseover="window.status='http://niceShourtUrl.com/'" onmouseout="window.status=''">Click Me</a>

此链接尝试使用window.status策略,但它不起作用.如何修复此链接,使其像Google和Yahoo搜索结果页面上的链接一样?在此示例中,当用户将鼠标悬停在链接上时,我希望" http://niceShourtUrl.com/ "显示在状态栏中.

javascript yahoo url statusbar

18
推荐指数
3
解决办法
1727
查看次数

类似于memcached的键/值缓存,它同时使用RAM和磁盘

我有一个java Web应用程序,后端使用第三方Web服务.调用Web服务会产生延迟,这在任何可能的情况下都很重要.此外,我的应用程序每天只允许进行一定数量的Web服务调用,因此除非绝对需要,否则最好不要进行Web服务调用.

我目前的解决方案是将Web服务结果缓存在Memcached中,这很有效.基本上,我们使用RAM来缓存Web服务结果.

但是,我们希望将其提升到新的水平.我们还有磁盘空间,我们希望将其用作磁盘缓存来缓存Web服务结果.我想要一个系统,首先我们检查RAM缓存(可能是Memcached,但不一定是).当RAM缓存未命中时,我们将回退到检查磁盘缓存.当磁盘高速缓存未命中时,我们将回退到调用Web服务.每当我们检索新的Web服务结果时,我们都会更新RAM缓存和磁盘缓存.

一种可能性是使用SQL数据库作为使用磁盘进行存储的系统的一部分.但这似乎不太理想.数据库往往需要大量的保姆.它们通常涉及无限增长的文件(数据库本身或事务日志),因此您需要管理当这些不断增长的文件开始导致文件系统空间不足时会发生什么.

我想要的是基于磁盘的系统部分,我可以告诉它使用多少磁盘空间,并且它将保证它永远不会使用更多.当它用完空间时,它会自动开始丢弃最近最少使用的键值对.我绝对不需要ACID,所以应该没有事务日志.

所以我正在寻找:1)基于磁盘的键值存储系统,当Memcached发生缓存未命中时可以充当"故障转移"或者2)单个系统将替换Memcached并提供RAM缓存和磁盘缓存.

我想要的其他重要品质:1)像Memcached一样,我想要一个不需要保姆的缓存系统.2)像Memcached一样,我希望缓存在几个服务器上进行分片,每个对象只存在于一个服务器上.3)像Memcached一样,我想要一些相当容易插入和使用的东西.我不想写大量的代码来实现这个目的.

我已经看过的其他系统:1)我认为Redis不符合这个要求,因为它的磁盘缓存只是RAM中的一个镜像.我希望RAM缓存是磁盘缓存的一小部分.2)EhCache有一个"永久磁盘存储,可以在VM重启之间存储数据",但这与我上面描述的不太相似.

Apache JCS(Java缓存系统)看起来很合适,所以我很乐意听到那些使用过它的人的意见.

java memcached persistence distributed caching

6
推荐指数
1
解决办法
6873
查看次数

消除memcached的30天限制

为什么memcached对缓存条目的生命周期施加了30天的限制?

在我的系统中,我总是将生命周期设置为30天,因为这是最大允许值.将其设置为远远超过30天的值将是我的应用程序的理想选择.

有没有办法将"30天"价值改为别的?

我正在考虑下载memcached源并重新编译它供我自己使用.我要么将"30"更改为"300",要么完全摆脱该检查.如果我这样做,我会改变一些会导致memcached出现故障或表现不佳的东西吗?我的期望是允许项目在缓存中保留更长时间,并且当缓存已满时,它们将从缓存中删除.

memcached

5
推荐指数
2
解决办法
3354
查看次数