Redis cli删除多个键

Joh*_* FG 4 redis phpredis stackexchange.redis redis-cli

我已经在centos中安装了Redis,我有多个像这样的redis键,

Product:<id>:<url>
Run Code Online (Sandbox Code Playgroud)

如何Product:*:* 使用CLI 删除所有内容?

Redis版本:3.2.4 [最新我猜]

谢谢!

Rob*_* F. 11

从redis 2.6.0开始,您可以使用LUA脚本。

您应该使用此变体而不是SCAN| XARGS变体,因为它更快。

以下脚本也适用于大量密钥。

  1. 打开你的 redis-cli
redis-cli -p somePort -a somePassword
Run Code Online (Sandbox Code Playgroud)
  1. 将 somePattern 替换为您的模式,例如*cars*(记住它不是正则表达式)
EVAL "for _,k in ipairs(redis.call('keys','somePattern')) do redis.call('del',k) end" 0
Run Code Online (Sandbox Code Playgroud)


Ita*_*ber 10

使用该redis-cli工具,您可以执行以下操作:

redis-cli --scan --pattern 'Product:*:*' | xargs redis-cli DEL
Run Code Online (Sandbox Code Playgroud)

  • 不太清楚为什么这对我来说失败了,但切换到这个并且它起作用了:`redis-cli keys '*' | grep 产品 | xargs -i redis-cli del {}` (4认同)
  • 没问题,我必须接受整容手术才能去除脸上的手掌印&lt;-这么多年了:) (2认同)

for*_*ack 5

没有内置的命令。您必须使用该SCAN命令获取与该模式匹配的所有键,然后使用该DEL命令删除这些键。

// scan from cursor 0 to get the next cursor and keys
SCAN 0 match Product:*:*
// next_cursor, Product:x1:y1, Product:x2:y2, ...
DEL Product:x1:y1 Product:x2:y2 ...
// scan from the next cursor until it return 0
SCAN next_cursor match Product:*:*
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用 aHASH来保存此模式的键:

// set key value
HSET Products Product:<id>:<url> value
// remove a single key
HDEL Products Product:<id>:<url>
// remove all keys
DEL Products
Run Code Online (Sandbox Code Playgroud)