很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




8年前关闭。




我有一个 Java Web 应用程序,它在后端使用第三方 Web 服务。调用 Web 服务会产生延迟,这很重要,应尽可能避免。此外,我的应用程序每天只允许进行一定数量的 Web 服务调用,因此除非绝对需要,否则最好不要进行 Web 服务调用。

我目前的解决方案是在 Memcached 中缓存 Web 服务结果,这很有效。基本上,我们使用 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 缓存系统)看起来很合适,所以我很想听听使用过它的人的意见。

请您参考如下方法:

我用过 ehcache对于基于 RAM/DISK 的缓存,这工作正常。确定在内存中保留多少对象以及在磁盘上保留多少对象的确切配置可以在代码之外完成,无需任何代码更改。没什么好说的,它是一个缓存,它工作得很好。

我用它来存储晶圆图以避免从远程数据库中获取它们。我调整了磁盘缓存的大小,以便能够在应用程序服务器附近保持几个月的生产,从而节省大量时间,尤其是在必须完成一些紧急返工时。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!