如何在Redis Cluster中删除与模式匹配的密钥
我尝试过这种方法,但它不起作用,因为我在集群模式下工作,redis告诉我: (错误)请求中的交叉插槽键未散列到同一插槽 答案是尝试在一个如何在Redis Cluster中删除与模式匹配的密钥,redis,redis-cluster,Redis,Redis Cluster,我尝试过这种方法,但它不起作用,因为我在集群模式下工作,redis告诉我: (错误)请求中的交叉插槽键未散列到同一插槽 答案是尝试在一个DEL中删除多个键。但是,与给定模式匹配的密钥可能不在同一插槽中,并且如果这些密钥不属于同一插槽,Redis Cluster不支持多个密钥命令。这就是为什么您会收到错误消息 要解决此问题,您需要逐个DEL这些键: redis-cli --scan --pattern "foo*" |xargs -L 1 redis-cli del xargs命令的-L选项指定
DEL
中删除多个键。但是,与给定模式匹配的密钥可能不在同一插槽中,并且如果这些密钥不属于同一插槽,Redis Cluster不支持多个密钥命令。这就是为什么您会收到错误消息
要解决此问题,您需要逐个DEL
这些键:
redis-cli --scan --pattern "foo*" |xargs -L 1 redis-cli del
xargs
命令的-L
选项指定要删除的键数。您需要将此选项指定为1
为了删除与模式匹配的所有键,还需要对集群中的每个主节点运行上述命令
注意
DEL
中删除这些键扫描
还是键
命令都效率低下,尤其是键
不应在生产中使用。您需要考虑为这些键建立索引。redis cli--pipe
,大大加快批量删除的速度,并使用而不是DEL
,降低对性能的影响
redis-cli --scan --pattern "foo*" | xargs -L 1 echo UNLINK | redis-cli --pipe
输出将如下所示:
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 107003
您仍然需要对集群中的每个主节点运行此操作。如果您有大量节点,则可能通过解析的输出进一步自动化该过程。一些人建议使用Eval作为选项;但是我还没有找到一个使用Eval的好例子。有线索吗?一些golang redis客户端库的示例会更好。我得到
(错误)请求中的交叉插槽键不会散列到同一插槽
我正在使用以下命令删除模式hi*
表单集群redis cli-uredis://localhost:6379 --扫描--模式“hi*”| xargs redis cli-uredis://localhost:6379 正如我在回答中提到的那样,您需要为xargs
命令指定-L 1
参数