【发布时间】:2014-08-28 23:32:47
【问题描述】:
我使用 FLUSHALL 命令删除我的 redis 缓存。来自文档:
删除所有现有数据库的所有键,而不仅仅是 目前选择了一个。此命令永远不会失败。
但它挂在我巨大的 redis 实例上(在我的情况下大约为 20GB),然后我终止了 redis 服务器,清除了 redis 备份目录并重新启动了 redis 服务器。一切似乎都很好,但这样做是好方法吗?为什么flushall挂起?
【问题讨论】:
我使用 FLUSHALL 命令删除我的 redis 缓存。来自文档:
删除所有现有数据库的所有键,而不仅仅是 目前选择了一个。此命令永远不会失败。
但它挂在我巨大的 redis 实例上(在我的情况下大约为 20GB),然后我终止了 redis 服务器,清除了 redis 备份目录并重新启动了 redis 服务器。一切似乎都很好,但这样做是好方法吗?为什么flushall挂起?
【问题讨论】:
FLUSHALL ASYNC(Redis 4.0.0 或更高版本)
Redis 现在可以在不同线程的后台删除键,而不会阻塞服务器。 FLUSHALL 和 FLUSHDB 添加了 ASYNC 选项,以便异步释放整个数据集或单个数据库。
异步 FLUSHALL 和 FLUSHDB 命令仅删除调用命令时存在的键。在异步刷新期间创建的键将不受影响。
【讨论】:
我也遇到过同样的问题,我的 64G 内存至强没有响应大约两个小时。 最后我用了
kill -9 redisPID
rm dump.rdb
service redis restart
像魅力一样工作))
【讨论】:
它挂起是因为它必须删除数百万个项目。这需要一段时间,因为它必须扫描所有内容。您可能还交换了部分数据。
您可能需要检查在 flushall 运行时机器是否不交换。
【讨论】: