0

我遇到了一个有趣的(不是说非常烦人的)问题。我对 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. 如果我尝试访问密钥,get <key>我会正确收到moved通知,并且如果我使用-c以下参数执行相同操作,我会正确重定向并收到nil回复。

我已经尝试过使用 lua 和 ruby​​ 脚本来做同样的事情,scan但是两者都在最初没有键的节点上输出应该删除的键。

有什么方法可以永久删除这些密钥,这样我就可以获得可靠的计数/证据证明它们已经消失了?

4

1 回答 1

0

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

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

于 2018-02-11T06:17:25.547 回答