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

Best way to delete multiple keys with wildcard in 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 中获取了命令行。

I have read somewhere that Keys shouldn't be used to delete multiple keys with a pattern because it would subject the server to security risks like DoS.

不安全,只是拒绝服务,而 KEYS 是 运行,因为它正在阻塞(如果回复太大,则很少出现 OOM 情况)。

Would this bash script a safer way to delete keys?

我会说更礼貌而不是更安全 - 这个班轮将允许在 SCAN 秒之间处理其他请求,而不是在持续时间内阻塞服务器。

Does xargs -L 1000 mean in each loop it will delete 1000 keys?

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

I want to run a bash script from node.js to remove all session keys from redis every time the server restarts.

如果你的Redis实例只用于存储session,可以考虑FLUSHALL。或者,如果(你应该)每个会话密钥都有一个 TTL,你可以只为你的会话使用 per-server-restart 前缀,让旧会话自然过期。