【问题标题】:Is there an embeddable Java alternative to Redis?Redis 是否有可嵌入的 Java 替代方案?
【发布时间】:2013-01-26 04:24:13
【问题描述】:

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

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

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

  1. 有一大组 M 用户(M 事先不知道)。
  2. 有一大组 N 项。
  3. 我们希望用户检查项目,一次一个用户/项目,这会产生一个存储结果(在普通数据库中)。
  4. 每次用户到达时,我们都希望为该用户分配该用户以前未见过的现有结果数量最少的项目。当我们只关心让所有项目查看大致相同的次数时,这会为所有到达的用户生成项目的近似循环分配。

上述以并行方式发生。当 M 和 N 很大时,Redis 比 SQL 查询更有效地完成上述操作。有没有办法使用比启动 Redis 服务器更轻量的可嵌入 Java 库来做到这一点?

我认识到,可以使用 Java 的并发库编写一堆代码,这些代码大致近似于这一点(在某种程度上,我已经做到了),但这并不是我在这里寻找的。​​p >

【问题讨论】:

    标签: java data-structures redis set embed


    【解决方案1】:

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

    快速入门指南中有一个运行嵌入式服务器与独立运行服务器的小示例。

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

    我对 Redis 了解不多,因此无法将它们的功能与功能进行比较。在我们使用 Voldemort 的项目中,我们使用了它的只读后备存储,效果很好。它使我们能够在我们的处理数据中心“预编译”一个双日数据库,并将其“运送”到边缘数据中心。这样,每个边缘数据中心都有其数据集的本地副本。

    编辑:重读您的问题后,我想添加Gauva's Table - 此表数据结构也可能是您正在寻找的东西,并且与您使用许多无 sql 数据库获得的类似。

    【讨论】:

    • 听起来很有趣......所以我可以运行一个单节点实例来进行本地查找和其他东西?我去看看。
    • @AndrewMao 是的,它支持单个节点。我还添加了一个指向 Gauva 的表数据结构的链接。祝你好运,狩猎愉快:-)
    【解决方案2】:

    Google 的 Guava 库提供了与 redis 提供的相同(甚至更多)集合运算符的友好版本。

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

    例如

    番石榴 Sets.intersection(a,b) 烧结 a b a.count() 发现一个 Sets.difference(a,b) sdiff a b Sets.union(a,b) sunion a b

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

    【讨论】:

    • 这绝对不能回答问题。虽然 Guava 是一个非常有用的通用库,但它不提供键值存储。这些方法的结果仍然必须以某种方式持久化。
    • @gyabraham 实际上,在许多用例中,Redis 没有持久化数据,其他一些数据库正在这样做。它只是用作计算使用数据库几乎不可能的查询的快速方法。无论如何,Guava 并不能真正取代 Redis 的特性。
    • Jedis 只是 Redis 的一个 Java API。数据库仍然需要在 Java 进程之外显式启动。
    【解决方案3】:

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

    该领域的商业解决方案包括Teracotta's Enterprise EhcacheOracle Coherence

    【讨论】:

      【解决方案4】:

      看看 lmdb(闪电内存数据库),因为我需要完全相同的东西。我将 dropwizard 应用程序部署到容器中,添加 redis 或其他外部依赖项很痛苦。这似乎表现良好,具有良好的活动性。仅供参考,不过,我还没有在生产中使用它。

      https://github.com/lmdbjava/lmdbjava

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        相关资源
        最近更新 更多