Hazelcast似乎是一个不错的选择,但我只需要一个没有Hazelcast的任何其他功能的地图,因此对于仅分布键值对的容器来说,这似乎有点过多。 />
但是除此之外,我似乎找不到任何其他满足需要的库。理想情况下,它应该是一个开放源码库,可以在商业产品中自由使用。
有什么想法吗?
#1 楼
Ehcache和Guava缓存是非常流行且有用的进程内缓存。如果可以使用外部进程进行缓存,则Memcached和Redis非常适合此目的。评论
据我所知,Guava Cache未分发。 Redis是用C语言编写的NoSQL解决方案,无法嵌入Java应用程序中(您可以嵌入Java客户端,但不能嵌入Redis安装),而Memcached不能按我想要的方式工作(即在所有数据上都具有相同的数据)节点,即复制)。
–JohnDoDo
2014年7月23日14:29
#2 楼
完全公开:我为Alachisoft工作。您可以检查NCache的.Net或TayzGrid的Java分布式缓存。这两个项目都是开源的。
您的要求是获取;
快速且分布式的Java可嵌入缓存库,可跨所有节点复制数据。这样,无论客户端
到达哪个服务器都可以访问最新状态。将其用于所需的功能,而忽略其他功能。
链接博客的简要代码概述
import com.alachisoft.TayzGrid.web.caching.Cache;
import com.alachisoft.TayzGrid.runtime.*;
public class MyCachingSample {
private String url = "dbc:msql://20.200.20.1:1114/MyDatabase";
public Employee GetEmployee(String empId) throws Exception {
Employee emp = null;
try {
Cache cache = TayzGrid.initializeCache("MyDistributedCache");
emp = (Employee) cache.get(empId);
//If key not found in cache, Load from the database
if (emp == null) {
//Your logic goes here
ResultSet rs = stmt.executeQuery("SELECT * FROM Employee WHERE EmpId ='" + empId + "'");
if (rs.next()) {
emp = new Employee();
emp.EmpId = rs.getString("EmpId");
//Cache key for future use
cache.insert(empId, emp, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default);
}
}
} catch (Exception exp) {
throw exp;
}
//return the required object
return emp;
}
}
您必须编写一个简单的会话提供程序让您自己支持粘性会话,或者您可以购买NCache或TayzGrid以获得这些功能。 TayzGrid或NCache也可以并且正像分布式缓存或内存数据网格一样使用,有时也用作内存键值存储。这完全取决于您的需求。
如果您需要支持或计划将其用于企业,则始终可以获取付费许可证。它是功能更丰富的版本,并提供支持。我们拥有超过10年的行业经验,因此对于完整的生产环境稳定。
评论
我曾经使用过EHCache,但我想它并不比Hazelcast轻...@Nicolas Raoul:感谢您的建议,但是我正在寻找一个开源库(我已经更新了我的问题)。据我所知,分布式EHCache表示经许可的Terracotta和BigMemory Max。
“ Terracotta积极开发,维护和支持Ehcache,它是根据Apache 2许可提供的专业开源项目。” ehcache.org
@Nicolas Raoul:那不是我的意思。据我了解,EHCache的分布式功能在开源发行版中不可用,例如ehcache.org/documentation/get-started/about-distributed-cache。我错了吗?
EHCache嵌入在开源产品Alfresco中,提供分布式缓存功能。因此,我很确定EHCache的分布式功能在开源发行版中也可用。我想说,该页面具有很大的误导性,他们正努力销售非开源版本。