如何在不影响性能的情况下执行 Redis 中的海量键删除?

最后更新于 2024 年 4 月 8 日

问题

如何在不影响性能的情况下执行 Redis 中的海量键删除?

回答

您可以使用 `redis-cli` 或 RedisInsight 的批量操作功能。

使用命令行

使用 `redis-cli`,您可以指定一个模式,并确保您

  • 使用 `-i` 选项,这样您就不会阻塞分片的执行
  • 使用 unlink,这样您就可以在后台执行任务
  -i <interval>      When -r is used, waits <interval> seconds per command.                     
                     It is possible to specify sub-second times like -i 0.1.

因此,使用该命令的一个示例将是

redis-cli -p <PORT> --scan --pattern city:* -i 0.01 | xargs redis-cli -p <PORT> unlink

在这里找到一些示例。

或者,可以使用带有 -L 选项(最大行数)的 xargs 来减少阻塞服务对其他命令的影响。

man xargs

[...]

-L number   Call utility for every number non-empty lines read.

使用 RedisInsight

RedisInsight 具有“批量操作”功能,并提供了删除键的选项。

  • 在“查找键”表单字段中,可以提供一个模式
  • 预览窗格将返回要删除的键列表
  • 单击“删除”按钮执行删除操作