Redis 提供了 DEL 命令来删除单个 key。当需要批量删除多个 key 时,您可以将 Linux 的 cat 和 xargs 命令与 Redis 的 DEL 命令组合使用来精确匹配批量删除 key;或者将 Redis 的 SCAN、RANDOMKEY、KEYS 或 FLUSHALL 与 DEL 命令组合使用来模糊匹配批量删除 key。
警告
- DEL、FLUSHALL 等命令执行后立即删除数据,操作不可逆,误删的数据无法恢复,请谨慎操作。
- 批量删除前,建议先执行手动备份,并确认待删除的 key 范围(可先使用 SCAN 或 KEYS 预览匹配结果)。具体操作,请参见手动备份。
- 建议先在测试环境验证匹配规则无误后,再在生产环境执行,并优先选择业务低峰期操作。
精确匹配批量删除 key
您可以参考如下命令语法在 Lua 脚本中将 Linux 的 cat 和 xargs 命令与 Redis 的 DEL 命令组合使用来精确匹配批量删除 key。
命令语法中各参数说明如下表所示。
命令示例如下。
模糊匹配批量删除 key
您可以将 Redis 的 SCAN、RANDOMKEY、KEYS 或 FLUSHALL 命令与 DEL 命令组合使用来模糊匹配批量删除 key。
(推荐)通过 SCAN 和 DEL 命令模糊批量删除
在 Python 代码中组合使用 SCAN 和 DEL 命令,来循环遍历并删除符合条件的 key。示例代码如下所示。
调用上述示例代码 scan_del.py,调用时需指定 Redis 实例的连接信息和 key 的匹配规则,即可实现模糊匹配批量删除符合条件的 key。
命令语法中各参数说明如下表所示。
命令示例如下。
通过 KEYS 和 DEL 命令模糊批量删除
警告
- KEYS 命令是一个阻塞式的操作,当 key 数量非常多时,可能会导致实例 CPU 使用率高甚至服务器阻塞。不建议在直接生产环境中使用,如需在生产环境中使用,强烈建议在数据较少时或业务低峰期操作。
- 缓存数据库 Redis 版默认禁用了 KEYS 命令。如需使用该命令,需将对应的命令从禁用命令参数的默认值中移除。否则执行这些禁用命令时,会出现 no permission to execute the command 的报错。参数修改方法,请参见设置实例参数。
组合使用 KEYS 和 DEL 命令模糊匹配批量删除符合条件的 key, 即先通过 KEYS 命令中的通配符模糊匹配所有符合条件的 key,再通过 DEL 命令删除这些 key。命令语法如下。
命令语法中各参数说明如下表所示。
命令示例如下。
通过 FLUSHALL 参数和 DEL 快速模糊批量删除
警告
缓存数据库 Redis 版默认禁用了 FLUSHALL 命令。 如需使用该命令,需将对应的命令从禁用命令参数的默认值中移除。否则执行这些禁用命令时,会出现 no permission to execute the command 的报错。参数修改方法,请参见设置实例参数。 组合使用 FLUSHALL 和 DEL 命令快速模糊匹配批量删除符合条件的 key, 即先通过 FLUSHALL 命令中的 WITHPATTERN 或 WITHOUTPATTERN 参数模糊匹配所有符合条件的 key,再通过 DEL 命令删除这些 key,或删除这些 key 之外的其他 key。命令语法如下:
命令语法中各参数说明如下表所示。
命令示例如下:
通过 RANDOMKEY 和 DEL 低频模糊批量删除
警告
- 因为 RANDOMKEY 是完全随机获取 key,可能需要多次获取才能找到符合匹配规则的 key。这种方法效率较低,适用于低频模糊批量删除 key 的业务场景。
- 当 Redis 中的 key 数量非常大且符合匹配规则的 key 比例较小时,整个命令执行过程可能会比较耗时。
- 已启用分片集群的 Redis 实例在执行 RANDOMKEY 命令时,会采用轮询方式来访问各分片,即 Redis 会将 RANDOMKEY 命令请求发往每一个分片,当访问的分片不存在符合条件的 key 时就返回 nil,该返回结果仅表示在当前分片上没有找到符合条件的 key,不代表在其他分片上没有符合条件的 key。因此建议在使用 RANDOMKEY 命令时,不要依据返回结果是否为 nil 来判定是否存在符合条件的 key。
在 Python 代码中组合使用 RANDOMKEY 和 DEL 命令来低频模糊批量删除 key,即通过多次随机获取 key 并判断其是否符合匹配规则进行删除。示例代码如下所示。
调用上述示例代码 randomkey_del_low_frequency.py,调用时需指定 Redis 实例的连接信息和 key 的匹配规则,即可实现模糊匹配批量删除符合条件的 key。
命令语法中各参数说明如下表所示。
命令示例如下。
验证指定 Key 是否删除成功
您可以通过如下命令检查指定 key 是否已成功删除。
命令示例如下。
若返回结果为 empty array 表示 Redis 中不存在该 key,即该 key 已被成功删除。