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

时间:2017-01-08 18:09:25

标签: events lua redis redisson

我使用Redisson库对关键值对或数据结构进行了分组。设计是任何值的值的变化应作为事件发送到订阅Lua脚本。然后,这些脚本进行计算并更新另一个组的键值对。此过程实现为链,以便一旦Lua脚本更新每个键值,它就会生成一个事件,而另一个Lua脚本的工作类似于基于某些参数的第一个Lua脚本。

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

问题2:事件是流水线的,但可能是我的Lua Scripts可能需要等待网络IO。在这种情况下,我假设处理下一个事件并执行订阅脚本。这对我来说是一个问题,因为第一个脚本还没有完成更新它需要的键值对,第二个脚本正在进行其工作。这会给我带来错误。有没有办法克服这个?

问题3:如何从Redisson数据结构中发出事件,我需要Lua脚本来理解数据结构的结构。怎么样?

1 个答案:

答案 0 :(得分:1)

在撰写本文时,Redis(3.2.9)不允许在Lua脚本中阻止命令,包括subscribe命令。因此,无法通过Lua脚本实现您所描述的内容。

但是你可以使用Redisson Topic和/或Redisson分布式服务来实现:

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

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

      1. 将整个批次创建为一个可运行的作业,并将其发送给Redisson远程执行程序进行处理。如果不是立即需要,您也可以选择安排作业。