Redis - 默认阻止VM

时间:2012-02-09 05:52:41

标签: redis virtual-memory

  

阻止VM的整体性能更好,因为没有时间丢失   同步,产生线程和恢复被阻止   客户等待价值观。所以,如果你愿意接受更高的   不时的延迟,阻塞VM可能是一个不错的选择。特别   如果交换很少发生,而且大多数经常访问的数据   恰好适合你的记忆。

这是Redis的默认模式(也是唯一的模式,我相信现在VM已经在2.6中弃用),让操作系统处理分页(如果/需要的话)。我的理解是正确的,在启动/启动时需要一些时间才能“热”。在使用16gb数据集的1gb RAM节点上工作时,Redis是否尝试在启动时将其全部加载到虚拟内存中,因此90%+会立即被分页,并且只有经过一些大量使用才能使上述语句成立?

1 个答案:

答案 0 :(得分:4)

Redis VM已在Redis 2.4中弃用,已在Redis 2.6中删除。这是一个死胡同:不要使用它。

我认为您将阻止虚拟机与操作系统分页混淆。它们是两回事。

当Redis VM根本没有配置时(无论阻塞模式如何),OS分页是Redis的默认模式。如果Redis内存不适合物理内存,操作系统将交换它。事件循环可以随时冻结。当它发生时,性能非常糟糕,因为Redis内部数据结构都没有为此设计(没有地点,没有寻呼系统)。

可以在非阻塞模式下配置Redis VM(使用I / O线程)。完成I / O后,事件循环不会被阻止,Redis仍然响应。但是,当I / O堆积过多时,I / O线程将完全忙碌,最终会出现响应式Redis,但无法处理任何需要I / O的查询。

Redis VM也可以在阻止模式下配置。在此模式下,所有I / O都在主事件循环线程中同步执行。因此,在I / O的情况下,事件循环被冻结(例如,在密钥未命中的情况下)。所有客户都受到影响。但是,一般性能(CPU消耗和延迟)优于非阻塞模式,因为保存了一些线程调度/同步。

实际上,OS分页和Redis阻止VM之间的区别在于粒度级别。使用Redis VM,粒度是关键。对于OS分页,它就是页面(一个4 KB的块,可以跨越几个不相关的键)。

在所有3种情况下,转储文件的初始加载速度极慢,并在系统上生成随机I / O峰值。正如您所指出的,大多数对象将被加载然后换出。预热时间很长。

除非您的数据具有极端的局部性,或者您根本不关心延迟,否则使用1 GB RAM作为16 GB数据集与Redis VM是科幻小说IMO。

Redis VM被淘汰的原因有很多。从设计上看,它永远不会像基于磁盘的数据存储(它可以利用文件映射或直接I / O来避免双缓冲,并使用适应的数据结构,如B树)。

Redis作为内存商店非常出色。但是如果你需要存储大于RAM的东西,不要使用它。其他(基于磁盘的)商店的表现都会好得多。