我有一个 Redis 实例,其中有大量数据已交换到磁盘。我已经设法从机器中释放了一堆内存,因此交换的所有内容现在都应该适合内存,没有任何问题。为了最大限度地减少性能问题或停机时间,最佳策略是什么?天真地,我猜想通读所有的键会将所有内容插入内存。似乎我也可以将数据库转储到磁盘,终止 redis 服务器,然后重新打开它。有没有更好的方法,无论是使用 redis 还是使用 Linux 中的内存工具?
最佳答案
假设操作系统已调出部分 Redis 内存(即您不使用旧 Redis 版本已弃用的虚拟内存功能),强制访问所有数据的最简单方法就是转储数据库(通过使用BGSAVE)。
在转储数据库时,所有键及其内容都将由后台进程访问,因此操作系统必须将相应的内存分页。由于交换事件将生成大量 I/O,但它们只会阻塞后台线程。对为您的流量提供服务的主 Redis 进程影响很小(假设它不使用 AOF)。
您不必重新启动Redis,简单的后台保存就足够了。
关于redis - 将交换的数据推回到 Redis 内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820505/