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

根据这个post ,如果我想从Java使用Redis,Jedis是最好用的。

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

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

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

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

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

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

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

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

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

编辑:在重新阅读你的问题后,我想添加Gauva的表 – 这个表DataStructure也可能是你正在寻找的东西,并且与许多无数据库数据库相似。

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

该领域的商业解决方案包括Teracotta的Enterprise Ehcache和Oracle Coherence 。

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

https://github.com/lmdbjava/lmdbjava

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

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

例如

    番石榴Redis
     Sets.intersection(a,b)烧结ab
     a.count()scard a
     Sets.difference(a,b)sdiff ab
     Sets.union(a,b)sunion ab

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