将 Redis 事件连接到 Lua 脚本执行和并发问题

我已经使用 Redisson 库分组了键值对或数据结构。设计是任何一组值的更改都应该作为事件发送到订阅的 Lua 脚本。然后,这些脚本进行计算并更新另一组的键值对。此过程被实现为一种链式结构,因此一旦 Lua 脚本更新键值对,则依此生成事件,并且另一个 Lua 脚本基于某些参数执行与第一个 Lua 脚本类似的工作。

问题 1:如何连接 Lua 脚本和事件?

问题 2:事件被管道化,但有可能我的 Lua 脚本必须等待网络 IO。在这种情况下,我假设下一个事件被处理并执行订阅脚本。对我来说,这是一个问题,因为第一个脚本尚未完成更新它需要的键值对,第二个脚本正在继续它的工作。这会导致错误。有没有办法解决这个问题?

问题 3:如何从 Redisson 数据结构发出事件,我需要 Lua 脚本了解该数据结构的结构。如何?

点赞
用户8190596
用户8190596

在撰写本文时,Redis(3.2.9)不允许在 Lua 脚本中使用阻塞命令,包括 subscribe 命令。因此,无法通过 Lua 脚本实现您描述的功能。但是,您可以使用 Redisson Topic 和/或 Redisson 分布式服务来实现:

  1. 修改值并向频道发送消息。另一个进程接收消息,执行计算和更新。

或者 ...

  1. 如果只有一个特定的进程执行计算和更新,则可以使用 Redisson 远程服务告诉此进程执行工作,它类似于 RPC。也许也能修改第一个值。

或者 ...

  1. 将整个作业作为一个可运行的作业创建,并将其发送到 Redisson 远程执行器进行处理。如果不需要立即进行,您也可以选择调度作业。
2017-06-21 20:59:58