Redis:用于大型密钥集的高效服务器集群

Redis:用于大型密钥集的高效服务器集群,redis,Redis,我有一组非常大的键,200米的键,值很小,首先,不建议使用共享数据库(即SELECT命令),因为所有这些数据库基本上都由相同的Redis进程管理。最好有10个单独的Redis进程(即使在同一台服务器上),以避免争用(更多信息) 接下来,有一些方法可以减少数据库的内存占用。例如,您可以执行客户端压缩(参见)或考虑其他优化,例如使用散列来保存多个值(如所描述的)。 也就是说,Redis服务器最终会受到主机提供的RAM数量的限制。一旦达到了这个限制,您就需要对数据库进行切分并使用Redis集群。因为您

我有一组非常大的键,200米的键,值很小,首先,不建议使用共享数据库(即
SELECT
命令),因为所有这些数据库基本上都由相同的Redis进程管理。最好有10个单独的Redis进程(即使在同一台服务器上),以避免争用(更多信息)

接下来,有一些方法可以减少数据库的内存占用。例如,您可以执行客户端压缩(参见)或考虑其他优化,例如使用散列来保存多个值(如所描述的)。 也就是说,Redis服务器最终会受到主机提供的RAM数量的限制。一旦达到了这个限制,您就需要对数据库进行切分并使用Redis集群。因为您已经在使用多个数据库,所以这不应该是一个很大的挑战,因为您的代码应该已经在一定程度上兼容了这些数据库。分片可以通过三种方法之一完成:客户端、代理或Redis集群。客户端分片可以在代码中实现,也可以由您使用的Redis客户端实现(如果您使用的客户端库支持)。预计将在不久的将来发布,并且已经有一个稳定的发布候选。至于基于代理的分片,有几种开源解决方案,包括和。可以找到有关分片和分区的其他信息


免责声明:我在Redis实验室工作。最后,AFAIK只有一家Redis即服务提供商已经为集群Redis提供了内置支持。Redis Labs是一种完全管理的服务,可以无缝扩展到任何所需的容量。我们的集群既支持“{}”hashtag标准,也支持RegEx的切分-可以找到更多关于这方面的信息。

您可以使用LMDB和Dynomite来存储超出内存容量的数据。LMDB使用磁盘和内存来存储数据。Dynomite使LMDB被分配

我们用这个组合做了一个POC,它们很好地协同工作

有关更多信息,请查看我们的公开发行:

您是否尝试将多个键用于单个哈希?这可以将内存使用量减少10倍。我正在回顾哈希/压缩策略。也许我应该就这个话题发表一个问题?我没有详细说明这个问题,但它很有趣。我们正在做一个S3端点,所以一个键是用户给定的“路径”,值是我们的内部对象“路径”。密钥可以是256个字符以内的任何内容。我们必须将该值转换为实际文件路径,但它完全在我们的控制之下。换句话说,我们需要某种指针来检索文件。因此,我可以使用压缩或哈希技术来减少数据库。这是下一步。这听起来像是一个不错的项目,如果你有任何见解(或想散列(:)出想法),也请与分享。