如何在redis中删除与特定模式匹配的键

Posted

技术标签:

【中文标题】如何在redis中删除与特定模式匹配的键【英文标题】:How to delete keys matching a certain pattern in redis 【发布时间】:2015-04-18 23:27:52 【问题描述】:

如何使用 redis-cli 在 redis 中删除与特定模式匹配的键。我想从以下列表中删除所有 foo。

KEYS *

foo:1
foo:2
bar:1
foo:3
bar:2
foo:4

【问题讨论】:

同一主题有多个已回答的问题,例如***.com/a/23399125/3160475 How to atomically delete keys matching a pattern using Redis的可能重复 不错的解决方案,即使对于大于 1000 个键的大型集合也是如此。 ***.com/questions/4006324/… 【参考方案1】:

正如对该问题的评论中所述,这里已经有许多其他答案。如果您正在考虑在生产服务器中执行此操作,请务必阅读上面的链接。

我发现对偶尔的命令行清理最有用的是:

redis-cli KEYS "*" | xargs redis-cli DEL

来自"How to atomically delete keys matching a pattern using Redis"。

【讨论】:

我会使用“redis-cli --scan”而不是 KEYS。尤其是在生活环境中。不建议使用 KEYS。 我无法使用-h 作为主机从远程主机中删除。 另外,为了澄清菲利普所说的,应该是 redis-cli --scan --pattern "*" 如果你不放模式它只会选择所有键。跨度> 【参考方案2】:

我想通过模式删除数千个键,经过一些搜索我发现了这些点:

如果你在redis上有多个数据库,你应该使用-n [number]来确定数据库 如果您有几个键,请使用 del,但如果有数千或数百万个键,最好使用 unlink,因为 unlink 是非阻塞的,而 del 是阻塞的,了解更多信息访问此页面unlink vs del keys 也像 del 并且正在阻塞

所以我使用此代码按模式删除键:

 redis-cli -n 2 --scan --pattern '[your pattern]' | xargs redis-cli -n 2 unlink 

【讨论】:

我收到(error) CROSSSLOT Keys in request don't hash to the same slot 我正在使用以下删除模式hi* 形成集群redis-cli -u redis://localhost:6379 --scan --pattern 'hi*' | xargs redis-cli -u redis://localhost:6379 DEL 嗨@roottraveller 我不知道问题出在哪里,但我搜索了一下,发现这个链接检查它是否适合你***.com/questions/38042629/redis-cross-slot-error @roottraveller 我对 redis 集群有同样的问题。一种解决方案是基本上一个一个地删除键,但使用redis-cli --pipe 来加快速度:***.com/a/66179509/4256475【参考方案3】:

我刚刚向 npm 和 github 发布了一个命令行界面实用程序,它允许您从 Redis 数据库中删除与给定模式(甚至 *)匹配的键。

您可以在此处找到该实用程序:

https://www.npmjs.com/package/redis-utils-cli

【讨论】:

【参考方案4】:

如果有人想在 AWS Elasticache redis 中执行相同的操作,那么您可以使用 SSH 连接到您应该访问 AWS Redis 服务器的 EC2 服务器,然后您可以使用以下命令。

redis-cli -h <HOST> -p <PORT> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> unlink

将主机和端口替换为 AWS redis 服务器主机和端口。

另外如果你的 redis 设置需要密码验证然后使用,

redis-cli -h <HOST> -p <PORT> -a <PASSWORD> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> -a <PASSWORD> unlink

将主机、端口和密码替换为 AWS redis 服务器主机、端口和密码。

您也可以对 localhost 使用上述命令。

【讨论】:

以上是关于如何在redis中删除与特定模式匹配的键的主要内容,如果未能解决你的问题,请参考以下文章

如何从redis-cli repl中删除Redis匹配模式中的所有键?

有没有办法删除所有 sessionStorage 项目与匹配特定模式的键?

如何使用纯 Redis 原子地删除数百万个匹配模式的键?

如何计算匹配模式的键数?

Redis 查找匹配字符串的模式键

Jq:递归删除与给定模式匹配的所有键