【问题标题】:Best way to delete multiple keys with wildcard in redis-cli在 redis-cli 中使用通配符删除多个键的最佳方法
【发布时间】:2016-04-12 18:25:54
【问题描述】:
我想从 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接了命令行。
【问题讨论】:
标签:
bash
redis
node-redis
redis-cli
【解决方案1】:
我在某处读到 Keys 不应该用于删除具有模式的多个密钥,因为它会使服务器面临 DoS 等安全风险。
不安全,只是在 KEYS 运行时拒绝服务,因为它是阻塞的(如果回复太大,则很少出现 OOM 场景)。
这个 bash 脚本会是一种更安全的删除密钥的方法吗?
我会说礼貌而不是更安全 - 这一个班轮将允许在 SCANs 之间处理其他请求,而不是在此期间阻塞服务器。
xargs -L 1000 是否意味着在每个循环中它将删除 1000 个键?
这意味着每个DEL 将拥有多达 1000 个密钥,具体取决于扫描结果。
我想从 node.js 运行一个 bash 脚本,以在每次服务器重新启动时从 redis 中删除所有会话密钥。
如果您的 Redis 实例仅用于存储会话,您可以考虑FLUSHALL。或者,如果(并且您应该)每个会话密钥都有一个 TTL,您可以为会话使用 per-server-restart 前缀,让旧会话自然过期。