我想从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行。
答案 0 :(得分:4)
我在某处读过
Keys
不应该使用模式删除多个密钥,因为它会使服务器面临像DoS这样的安全风险。
不安全,只是在KEYS
正在运行时拒绝服务,因为它正在阻止(如果回复太大,很少是OOM方案)。
这个bash脚本会更安全地删除密钥吗?
我会说politer而不是更安全 - 这个内联将允许在SCAN
之间提供其他请求,而不是在持续时间内阻止服务器。
xargs -L 1000
在每个循环中是否意味着它会删除1000个密钥?
这意味着每个DEL
最多可包含1000个密钥,具体取决于扫描结果。
我想从node.js运行bash脚本,以便每次服务器重新启动时从redis中删除所有会话密钥。
如果您的Redis实例仅用于存储会话,则可以考虑FLUSHALL
。或者,如果(并且您应该)每个会话密钥都有一个TTL,您可以为会话使用每服务器重启前缀,并让旧会话自然过期。