将交换的数据推回Redis中的内存

将交换的数据推回Redis中的内存,redis,Redis,我有一个redis实例,其中有相当数量的数据已交换到磁盘。我已经设法从机器上释放了一堆内存,所以现在交换的所有东西都应该可以放入内存,而不会出现任何问题。为了最大限度地减少性能问题或停机时间,最好的策略是什么?天真的是,我猜通读所有的钥匙会把所有的东西都记在记忆里。看起来我还可以将数据库转储到磁盘,杀死redis服务器,然后重新打开它。使用redis或Linux中的内存工具,有更好的方法吗?假设操作系统已调出部分redis内存(即,您不使用旧redis版本中不推荐使用的虚拟内存功能),强制执行所

我有一个redis实例,其中有相当数量的数据已交换到磁盘。我已经设法从机器上释放了一堆内存,所以现在交换的所有东西都应该可以放入内存,而不会出现任何问题。为了最大限度地减少性能问题或停机时间,最好的策略是什么?天真的是,我猜通读所有的钥匙会把所有的东西都记在记忆里。看起来我还可以将数据库转储到磁盘,杀死redis服务器,然后重新打开它。使用redis或Linux中的内存工具,有更好的方法吗?

假设操作系统已调出部分redis内存(即,您不使用旧redis版本中不推荐使用的虚拟内存功能),强制执行所有要访问的数据的最简单方法就是转储数据库(使用BGSAVE)

在转储数据库时,所有键及其内容都将被后台进程访问,因此操作系统必须在内存中分页。由于交换活动,将生成大量I/O,但它们只会阻塞后台线程。对服务于您的流量的主Redis进程几乎没有影响(前提是它不使用AOF)


您不必重新启动Redis,一个简单的后台保存就足够了。

好的,这让人放心。我仍然有点困惑,因为查看所讨论的redis进程的
smap
的输出(根据redis.io上antirez的延迟页面),我看到了大量数据交换<但是,代码>vmstat不显示任何交换活动。linux是否会延迟清理这个交换的内存,以便它可能同时存在于内存和交换的空间中?是的,交换的数据实际上是缓存的。看见