2

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

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

我从这里拿了命令行。

4

1 回答 1

4

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

不是安全性,只是在KEYS运行时拒绝服务,因为它是阻塞的(如果回复太大,很少会出现 OOM 场景)。

这个 bash 脚本会是一种更安全的删除密钥的方法吗?

我会说礼貌而不是更安全 - 这一个班轮将允许在SCANs 之间提供其他请求,而不是在此期间阻塞服务器。

是否xargs -L 1000意味着在每个循环中它将删除 1000 个键?

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

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

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

于 2016-01-08T13:23:42.753 回答