26

根据这个线程,如果我想从 Java 中使用 Redis,Jedis 是最好的选择。

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

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

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

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

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

4

4 回答 4

11

看看伏地魔项目。它是由Linked-In创建的分布式键值存储,它支持嵌入的能力。

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

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

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

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

于 2013-03-07T19:25:16.807 回答
4

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

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

于 2014-05-29T07:42:52.603 回答
0

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

https://github.com/lmdbjava/lmdbjava

于 2017-08-30T05:43:13.953 回答
-6

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

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

例如

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

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

于 2013-04-26T04:59:36.337 回答