是否有可嵌入的Java替代Redis?

时间:2013-02-11 04:23:01

标签: java data-structures redis set embed

According to this thread,如果我想从Java使用Redis,Jedis是最好用的。

但是,我想知道是否有任何库/包提供与Redis中已存在的类似的高效设置操作,但是可以直接嵌入Java应用程序而无需设置单独的服务器。 (即使用Jetty作为Web服务器)。

更确切地说,我希望能够有效地执行以下操作:

  1. 有很多M个用户(事先不知道M)。
  2. 有大量的N项。
  3. 我们希望用户一次检查项目,一个用户/项目,这会生成存储结果(在普通数据库中)。
  4. 每次用户到达时,我们都希望为该用户分配用户之前从未见过的现有结果数量最少的项目。当我们只关心所有项目的查看次数大致相同时,这会对所有到达的用户进行近似的循环分配。
  5. 以上以并行方式发生。当M和N很大时,Redis比SQL查询更有效地完成上述任务。有没有办法使用比启动Redis服务器更轻量级的可嵌入Java库来做到这一点?

    我认识到使用Java的并发库编写一堆代码是可能的,这些库大致接近这个(在某种程度上,我已经完成了),但这并不是我在这里寻找的。

4 个答案:

答案 0 :(得分:11)

看看project voldemort。它是Linked-In创建的分布式键值存储,它支持嵌入式功能。

快速入门指南是运行嵌入式服务器与独立服务器的小例子。

VoldemortConfig config = VoldemortConfig.loadFromEnvironmentVariable();
VoldemortServer server = new VoldemortServer(config);
server.start();

我对Redis了解不多,所以我无法将它们与功能进行比较。在我们使用Voldemort的项目中,我们使用它的readonly支持商店,效果很好。它允许我们在我们的处理数据中心“预编译”每日两次的数据库,并将其“运送”到边缘数据中心。这样每个边缘数据中心都有一个数据集的本地副本。

编辑:在重新阅读您的问题之后,我想添加Gauva's Table - 这个表数据结构也可能是您正在寻找的东西,并且与许多无数据库数据库相似。

答案 1 :(得分:4)

Hazelcast提供了许多分布式数据结构实现,可用作Redis服务的纯Java替代方案。然后,您可以发送一个包含所有必需依赖项的“jar”来运行您的应用程序。您可能必须在自己的应用程序中调整与Redis略有不同的原语。

此空间中的商业解决方案包括Teracotta's Enterprise EhcacheOracle Coherence

答案 2 :(得分:0)

看看lmdb(Lightning Memory Database),因为我需要完全相同的东西。我将dropwizard应用程序部署到容器中,添加redis或其他外部依赖是很痛苦的。这似乎表现良好,有很好的活动。但是,我还没有在生产中使用它。

https://github.com/lmdbjava/lmdbjava

答案 3 :(得分:-5)

Google的Guava Library提供了redis提供的相同(和更多)Set运算符的友好版本。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

e.g。

    Guava                     Redis
    Sets.intersection(a,b)    sinter a b
    a.count()                 scard a
    Sets.difference(a,b)      sdiff a b
    Sets.union(a,b)           sunion a b

Multisets也是redis排序集的一个相当简单的代理。