如何在不影响性能的情况下在 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

在此处找到一些示例。

或者,可以使用 xargs 结合 -L 选项(最大行数)来降低阻塞服务以执行其他命令的可能性。

man xargs

[...]

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

使用 RedisInsight

RedisInsight 具有“批量操作”功能,并且可以选择删除键。

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