Mât*_*man 1 virtual-memory redis
阻塞虚拟机的性能总体上更好,因为在同步、线程生成和恢复阻塞的客户端等待值方面没有时间损失。因此,如果您愿意偶尔接受较高的延迟,那么阻止虚拟机可能是一个不错的选择。特别是如果交换很少发生并且大多数经常访问的数据恰好适合您的内存。
这是 Redis 的默认模式(我相信现在 VM 在 2.6 中已弃用),让操作系统来处理分页(如果/需要时)。我的理解是正确的,启动/启动时需要一些时间才能变得“热”。当在具有 16GB 数据集的 1GB RAM 节点上工作时,Redis 是否会在启动时尝试将其全部加载到虚拟内存中,从而立即调出 90% 以上,并且只有在大量使用之后,上述陈述才成立?
Redis VM 在 Redis 2.4 中已被弃用,并在 Redis 2.6 中被删除。这是一个死胡同:不要使用它。
我认为您将阻塞虚拟机与操作系统分页混淆了。他们是两个不同的东西。
当 Redis VM 根本没有配置时(无论阻塞模式如何),操作系统分页是 Redis 的默认模式。如果物理内存不适合,操作系统将交换 Redis 内存。事件循环可以随时冻结。当这种情况发生时,性能会很糟糕,因为没有任何 Redis 内部数据结构是为此设计的(没有局部性,没有分页系统)。
Redis VM 可以配置为非阻塞模式(使用 I/O 线程)。当 I/O 完成时,事件循环不会被阻塞,Redis 仍然响应。然而,当太多 I/O 堆积时,I/O 线程将完全繁忙,最终您会得到一个响应良好的 Redis,但无法处理任何需要 I/O 的查询。
Redis VM 也可以配置为阻塞模式。在此模式下,所有 I/O 均在主事件循环线程中同步执行。因此,如果发生 I/O(例如,按键未命中),事件循环就会被冻结。所有客户都会受到影响。但是,一般性能(CPU 消耗和延迟)优于非阻塞模式,因为节省了一些线程调度/同步。
实际上,操作系统分页和 Redis 阻塞虚拟机之间的区别在于粒度级别。对于Redis VM,粒度是关键。对于操作系统分页,它就是页面(一个 4 KB 的块,可以跨越多个不相关的键)。
在所有 3 种情况下,转储文件的初始加载都将非常慢,并会在系统上生成随机 I/O 峰值。正如您所指出的,大多数对象将被加载然后换出。预热时间将很长。
除非您的数据具有极端局部性,或者您根本不关心延迟,否则在 IMO 中,使用 Redis VM 来处理 16 GB 数据集的 1 GB RAM 简直就是科幻小说。
Redis VM 被淘汰是有原因的。根据设计,它的性能永远不会像基于磁盘的数据存储(可以利用文件映射或直接 I/O 来避免双缓冲,并使用 B 树等适应的数据结构)。
Redis 作为内存存储非常出色。但如果您需要存储大于 RAM 的内容,请不要使用它。其他(基于磁盘的)存储都会表现得更好。
归档时间: |
|
查看次数: |
392 次 |
最近记录: |