这个需求是要缓存大量的小对象(100,000到1,000,000),并根据未来事件控制单个对象的过期时间。 过期时间没有时间组件。
缓存必须对多个应用程序服务器(SpringSource dm Server)可用,并且最好本身是可分发和容错的。
我一直在研究Terracotta作为可能的解决方案。那是一个好的选择吗?还有更好的选择吗?
这个需求是要缓存大量的小对象(100,000到1,000,000),并根据未来事件控制单个对象的过期时间。 过期时间没有时间组件。
缓存必须对多个应用程序服务器(SpringSource dm Server)可用,并且最好本身是可分发和容错的。
我一直在研究Terracotta作为可能的解决方案。那是一个好的选择吗?还有更好的选择吗?
我认为最适合你的选择是JBoss Infinispan (http://www.jboss.org/infinispan)。这个缓存设置起来非常简单,支持复制、清除、持久化等多种功能。更重要的是,这个缓存可以在你的应用服务器中使用。你还可以通过REST访问缓存,并且有抽象层用于将Hibernate连接到它上面。
一些来自键值世界的新手可能是一个替代方案。如果我正确理解了您的要求,memcached似乎是一个非常适合的选择,开销非常小。客户端一致性哈希将为您提供相当不错的容错能力。
Redis、Voldemort或Tokyo Tyrant也可能是相关的,即使它们更多地涉及存储而不是缓存。特别是Redis具有一些非常出色的功能(列表、集合、原子操作等)
你考虑过Memcached吗?你特别提到了小对象:在这方面,memcached非常出色。它是分布式和容错的,非常快速,开源的,在各个地方都得到积极使用和维护,并且有两个很棒的Java客户端API:Danga和Spy。
唯一不符合你要求的是memcached缺乏对象过期时间组件。我相信一个对象可以在缓存中停留的最长时间是30天。但具体情况因人而异。