5

我正在尝试使用以下命令从远程 Redis 数据库中删除多个键。

redis-cli -h <host> -p 6379 KEYS "myprefix:*" | xargs redis-cli -h <host> -p 6379 DEL

它已删除所有匹配的键,但其中包含空格的键除外。

例如

删除:

  • 我的前缀:abc
  • 我的前缀:定义
  • 我的前缀:ghi

未删除:

  • 我的前缀:jkl mno
  • 我的前缀:pqr stu
  • 我的前缀:vwx yza

我的查询模式应该是什么,以便这些也被删除?我尝试谷歌搜索,但无法找到任何解决方案。

4

3 回答 3

9

问题在于 xargs,而不是您的 KEYS 查询。如果你运行你的查询,你会注意到它正确地返回了带有空格的键。问题在于,默认情况下 xargs 会通过空格和换行符将通过管道传输到其中的字符串拆分。要更改此行为以使其仅由换行符分隔,请添加-d "\n"选项。例如:

redis-cli -h <host> -p 6379 keys "myprefix:*" | xargs -d "\n" redis-cli -h <host> -p 6379 del
于 2018-06-12T12:18:05.867 回答
1

对于使用 Mac OS xargs (BSD) 而不是 linux (GNU) xargs 的任何人,以下工作

redis-cli -h <host> -p 6379 keys "myprefix:*" | xargs -I% redis-cli -h <host> -p 6379 del %

或对于其他奇怪的字符,如语音标记,这有效

redis-cli -h <host> -p 6379 --scan --pattern "myprefix:*" | tr '\n' '\0' | xargs -0 -I% redis-cli -h <host> -p 6379 del %

于 2020-03-20T18:34:21.283 回答
0

这是另一个让它在 Mac 上工作的技巧。

redis-cli KEYS 'pattern*' | xargs -0 -n1 'echo' | sed "s/^/'/g" | sed "s/$/'/g" | xargs redis-cli DEL

这基本上在传递给之前在您的键周围加上引号redis-cli DEL

于 2020-09-19T11:36:24.757 回答