我想从 node.js 运行 bash 脚本,以在每次服务器重新启动时从 Redis 中删除所有 session key 。
我在某处读到,Keys
不应该用于删除具有模式的多个 key ,因为这会使服务器面临 DoS 等安全风险。这个 bash 脚本是否是一种更安全的删除 key 的方法? 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
。或者,如果(并且您应该)每个 session key 都有 TTL,您可以为 session 使用每服务器重新启动前缀,并让旧 session 自然过期。
关于bash - 在 redis-cli 中使用通配符删除多个键的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670813/