我正在尝试使用以下命令从远程Redis数据库中删除多个密钥。
redis-cli -h <host> -p 6379 KEYS "myprefix:*" | xargs redis-cli -h <host> -p 6379 DEL
删除了所有匹配的键,除了包含空格的键。
例如
删除:
未删除:
我的查询模式应该是什么,以便这些也被删除?我试过谷歌搜索,但无法找到任何解决方案。
答案 0 :(得分:7)
问题在于xargs,而不是您的KEYS查询。如果运行查询,您会注意到它正确返回了带有空格的键。问题是默认情况下,xargs将空格和换行符串行传输到其中。要更改此行为以便仅按换行符分隔,请添加 -d&#34; \ n&#34; 选项。例如:
redis-cli -h <host> -p 6379 keys "myprefix:*" | xargs -d "\n" redis-cli -h <host> -p 6379 del
答案 1 :(得分:0)
对于使用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 %
答案 2 :(得分:0)
这是另一个使其可以在Mac上运行的黑客。
redis-cli KEYS 'pattern*' | xargs -0 -n1 'echo' | sed "s/^/'/g" | sed "s/$/'/g" | xargs redis-cli DEL
这基本上会在传递给redis-cli DEL