我需要删除我的 redis 集群中的一些键,这些键只能从部署在 kubernetes 集群中的跳转机访问。
所以如果我知道密钥,我可以通过以下命令毫无问题地删除它:
➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host DEL "the-key"
(interger) 1
但如果我想批量执行则它会输出 0,这意味着未删除:
➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -L 1 kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host -c DEL
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
Unable to use a TTY - input is not a terminal or the right kind of file
0
我对使用还很陌生xargs
,我不知道哪里出了问题。
我尝试使用以下命令对其进行调试,它毫无问题地给出了所有键:
➜ kubectl exec -it jump-machine -- /usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -L 1 echo
the-key-pattern-1
the-key-pattern-2
the-key-pattern-3
...
希望有人可以阐明这一点,提前谢谢!
答案1
我认为你应该删除kubectl
后面的部分xargs
,如下所示:
kubectl exec -it jump-machine -- bash -c '/usr/local/bin/redis-cli -c -h redis-cluster-host --scan --pattern "*the-key-pattern*" | xargs -i /usr/local/bin/redis-cli -c -h redis-cluster-host DEL {}'
注意
- 单引号至关重要
- 更改为
xargs -L 1
,xargs -i
因为xargs -L 1
是在 mac osx 上运行的,而现在单引号使得xargs
在 linux 上运行,因此-L
无法识别 {}
至关重要,否则你会得到(error) CROSSSLOT Keys in request don't hash to the same slot