Redis EVAL-per-event 或 EVAL-all-events-at-once

标签 redis lua

如果你有大约 50 个事件/秒,每个事件都应该以事务方式处理(进行 3 次 SADD 操作),哪个更好:

  1. 为每个事件运行一个 Lua 脚本(通过 EVALSHA)?
  2. 运行单个 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/

相关文章:

node.js - Redis NOAUTH 错误 - 尽管在我的 redis.conf 文件中禁用了身份验证

node.js:为什么 NODE_DEBUG=1 不起作用? (试图调试 require() 错误)

java - 使用spring boot从redis读取字符串

python - 在 python 中模拟 redis

c# - Redis 服务器和连接多个客户端

c++ - 如何销毁和重建 lua_State

c++ - 从 Lua 内部获取 Lua 状态,以便它可以传递回 C

sockets - 使用 luasocket 和代理获取 url 页面

algorithm - 查找多边形内的任意点

c++ - Netbeans C++ 附加命令(使用tolua++)