在redis-cli中使用通配符删除多个密钥的最佳方法

时间:2016-01-08 06:30:48

标签: bash redis node-redis redis-cli

我想从node.js运行bash脚本,以便每次服务器重新启动时从redis中删除所有会话密钥。 我在某处读过Keys不应该用于删除带有模式的多个密钥,因为它会使服务器面临像DoS这样的安全风险。这个bash脚本会更安全地删除密钥吗? xargs -L 1000在每个循环中是否意味着删除1000个密钥?我理解正确吗?

#!/bin/bash
redis-cli --scan --pattern "SESSION:*" | xargs -L 1000 redis-cli del

我从HERE获取了comman行。

1 个答案:

答案 0 :(得分:4)

  

我在某处读过Keys不应该使用模式删除多个密钥,因为它会使服务器面临像DoS这样的安全风险。

不安全,只是在KEYS正在运行时拒绝服务,因为它正在阻止(如果回复太大,很少是OOM方案)。

  

这个bash脚本会更安全地删除密钥吗?

我会说politer而不是更安全 - 这个内联将允许在SCAN之间提供其他请求,而不是在持续时间内阻止服务器。

  

xargs -L 1000在每个循环中是否意味着它会删除1000个密钥?

这意味着每个DEL最多可包含1000个密钥,具体取决于扫描结果。

  

我想从node.js运行bash脚本,以便每次服务器重新启动时从redis中删除所有会话密钥。

如果您的Redis实例仅用于存储会话,则可以考虑FLUSHALL。或者,如果(并且您应该)每个会话密钥都有一个TTL,您可以为会话使用每服务器重启前缀,并让旧会话自然过期。