我有一个java web应用程序,它使后端使用第三方web服务。调用Web服务会产生延迟,这对于尽可能避免重要。另外,我的应用程序只允许每天进行一定数量的Web服务调用,因此除非绝对需要,否则最好不要进行Web服务调用。同时使用RAM和磁盘的类似memcached的键/值缓存
我现在的解决方案是将Web服务结果缓存在Memcached中,这很好。基本上,我们正在利用RAM来缓存Web服务结果。
但是,我们希望把它带到下一个层次。我们还有磁盘空间,我们希望将其用作缓存Web服务结果的磁盘缓存。我想要一个系统首先检查RAM缓存(可能是Memcached,但不一定是)。当一个RAM缓存未命中发生时,我们会回到检查磁盘缓存。而当磁盘缓存未命中发生时,我们会回到调用Web服务。无论何时我们检索新的Web服务结果,我们都会更新RAM缓存和磁盘缓存。
一种可能性是将SQL数据库用作使用磁盘进行存储的系统的一部分。但这似乎并不理想。数据库往往需要大量的保姆。它们通常涉及无限制增长的文件(数据库本身或事务日志),因此您需要管理在这些增长文件开始导致文件系统耗尽空间时发生的情况。
我想要的是系统中基于磁盘的部分,我可以告诉它使用多少磁盘空间,并且可以保证永远不会使用更多的磁盘空间。当空间用完时,它会自动开始丢弃最近最少使用的键值对。我绝对不需要ACID,所以应该没有事务日志。
所以我要寻找两种: 1)基于磁盘的键值存储系统,可以为“故障”时,Memcached的具有高速缓存未命中 OR 2)单系统,该系统将取代Memcached和行动提供RAM缓存和磁盘缓存。
我想要的其他重要特质: 1)像Memcached一样,我想要一个不需要保姆的缓存系统。 2)像Memcached一样,我希望缓存在多个服务器之间进行分片,每个对象只能位于一台服务器上。 3)像Memcached一样,我想要一些相当容易插入和使用的东西。我不想写一大堆代码来实现这个工作。
我已经看过的其他系统: 1)我相信Redis不适合这里的账单,因为它的磁盘缓存只是RAM中的内容的镜像。我希望RAM缓存成为磁盘缓存的一小部分。 2)EhCache有一个“在VM重启之间存储数据的持久磁盘存储”,但这与我上面描述的不一样。 (Java缓存系统)看起来可能是一个很好的选择,所以我很乐意听到那些使用它的人的意见。
谢谢。这可能是我正在寻找的解决方案。我现在看到您可以配置DiskStore并指定maxElementsOnDisk参数。 – 2010-06-21 02:25:00