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

标签 bash redis node-redis redis-cli

我想从 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/

相关文章:

Redis:如何更新 key 但不更改其过期时间?

node.js - Node JS Redis 客户端连接重试

linux - 将制表符打印为十六进制

bash - Bash 的隐藏特性

linux - 根据其他列的值创建一个新列

node.js - 错误处理程序 Nodejs Redis 连接域失败

Node.js:Jest + redis.quit() 但打开句柄警告仍然存在

regex - 如何使用捕获的组来转换这些行?

windows - 我如何在Windows中运行redis lua脚本

caching - Redis vs Appfabric Cache ,或者另一种解决方案