如果你有大约 50 个事件/秒,每个事件都应该以事务方式处理(进行 3 次 SADD 操作),哪个更好:
- 为每个事件运行一个 Lua 脚本(通过 EVALSHA)?
- 运行单个 Lua 脚本来迭代所有事件并立即更新它们?
我的考虑:单个 EVAL 至少不会比 EVAL-per-event 慢。主要关注的是脚本执行时间。据我所知,它应该阻止所有 Redis 命名空间中的所有操作。但我想我不应该害怕在一个 EVAL 中进行 150 次 SADD 操作,对吧?
最佳答案
你最好用你的生产环境做一些基准测试,虽然我认为 150 个操作太多了,不能暂时阻塞 Redis。
事实上,您还有另一种选择:在 pipeline 中运行 50 个 Lua 脚本.使用管道,您的每个 Lua 脚本都不会长时间阻塞 Redis,即只有 3 个操作,并且它节省了大量的 RTT,并且应该比 50 个 EVALSHA
命令快得多。
关于Redis EVAL-per-event 或 EVAL-all-events-at-once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726406/