4

我正在尝试使用 redis 服务器中的模式删除 KEYS,但它没有被删除。

示例键

1) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x03\t\xa0\x01"
2) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x03\t\x98\x02"
3) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x03\t\xb8\x02"
4) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x02\t!"
5) "flc_1310sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x02\t~"
6) "flc_1310sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x03\t\xc0\x02"
7) "flc_-41sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x03\t\xc5\x01"
8) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x03\t\x94\x03"
9) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x03\t\xd3\x01"
10) "flc_77sandeep-pant-back.int.dev.mykronos.com_personality:\xac\xed\x00\x05w\x0e\x03\x01SecondaryKe\xf9:\xac\xed\x00\x05w\x03\t\xee\x02"

命令

redis-cli 键 *sandeep-pant* | xargs redis-cli DEL

输出

xargs: WARNING: a NUL character occurred in the input.  It cannot be passed through in the argument list.  Did you mean to use the --null option?
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
(integer) 0
4

4 回答 4

5

如果您不想编写 bash 脚本,请使用此单行

redis-cli --scan --pattern "*sandeep-pant*" | sed -e 's/^/"/g' -e 's/$/"/g' | xargs -i redis-cli del {}

解释:

  1. 逐行获取匹配的键
  2. sed 在每个键的开头和结尾添加引号
  3. xargs 会一一删除记录。

{} 是应该在脚本中放置密钥的标记

于 2017-11-23T12:56:56.193 回答
4

你不应该使用KEYS它,因为它是一个阻塞操作,SCAN而是使用它。如果您使用 glob 模式,请用引号将其括起来:

redis-cli --scan --pattern '*sandeep-pant*' | xargs -L 100 redis-cli del

您可以每次使用 100 个键-L 100对操作进行批处理。DEL

于 2017-05-11T16:33:32.977 回答
3

巴什代码:

for k in $(redis-cli -a password1 keys "*"); do
  echo "delete key '$k'";
  redis-cli -a password1 DEL $k;
done

-a password1如果不需要密码,请删除

于 2017-05-11T11:42:34.923 回答
0

您可能想阅读有关文档DEL- 当您这样做时,您会注意到它不接受键名模式(即通配符),但需要准确的键名才能删除。

于 2017-05-10T10:09:49.123 回答