如何从redis群集节点清除重定向的密钥

时间:2018-02-07 01:47:55

标签: ruby lua redis redis-cli

我遇到了一个有趣的(不是说令人恼火的烦人)问题。我是Redis的新手,但我知道如何操作基础知识。

基本上我有一个包含3个主服务器的集群,每个主服务器有2个服务器,每个服务器分别对应三个服务器。

我有一堆普通的密钥,我尝试根据所有服务器上的模式清理所有密钥,所以我在主节点上运行这样的东西:

for server in "${servers[@]}" do
    ./redis-cli -h ${server} -p ${master_port} KEYS 'pattern:*' | xargs -I {} ./redis-cli -h ${server} -p ${master_port} DEL {}
done

现在这很好用,看起来所有密钥都会被删除,但是当我在每台服务器上再次运行KEYS 'pattern:*'命令时,属于master 1的密钥会出现在master 2列表中{1}}。如果我尝试使用get <key>访问密钥,我会正确地收到moved通知,如果我使用-c关注参数执行相同的操作,我会正确重定向并收到{{1}回来。

我使用lua和ruby脚本对nil尝试了同样的事情但是两者都在首先没有键的节点上输出了应该删除的键。

有没有办法永久删除这些密钥,这样我就可以获得值得信赖的数据/证据表明它们已经消失了?

1 个答案:

答案 0 :(得分:0)

不,如果有匹配的话,你执行的cli循环应该为每个服务器中的每个键返回一个布尔1整数。如果您想确保删除所有密钥,只需为每个服务器运行KEYS pattern:*,以检测终端上处于交互模式时剩余的残留物。

此外,从主服务器中删除密钥时,请尝试使用-c标志。我从我的终端运行命令只是为了仔细检查重定向的密钥是否真正删除了,我使用了Node.JS包装并运行了一个简单的client.keys('pattern', (err, res)=>console.log(res))并带有一个空数组,表明密钥不再存在。或者您可以执行简单的flushall命令来删除密钥

相关问题