【发布时间】:2022-09-27 19:38:41
【问题描述】:
我有一个 nodejs 应用程序正在运行(haraka smtp 服务器),有 1 个主线程和 7 个工作线程。我正在使用 redis 读取一些计数器,并在一些操作后更新这些计数器。
我面临竞争条件的问题,其中一些线程在其他线程实际更新计数器之前读取计数器,因此计数器不匹配。理想情况下,它应该像一个线程对该特定键进行读写操作,然后其他线程应该继续进行操作。
我目前正在运行一个 redis 实例。是否可以通过多个线程和单个 redis 实例来避免这种竞争条件?
我读过有关 redlock 的信息,但 redis 网站说最好将 redlock 与至少 3 个 redis 实例一起使用。
-
你考虑过使用 redis pub/sub 吗?这样您就可以触发从其他节点读取节点。
-
嗨@JeanJacquesGourdin 我是 redis 新手,你能指导我完成它吗?
-
我已经完成了 redis pub/sub,但我不知道如何在每个节点既是发布者又是订阅者的特定用例中使用它。在我的情况下,实际发生的是我将 ip 地址和一些计数器存储到 redis,以便将这些 ip 的使用限制为特定计数。现在,当收到电子邮件请求时,它会检查当前计数并在使用 ip 时增加计数,但如果多个线程同时读取计数可能会导致计数不匹配。
-
我想我误解了你想要的。如何触发电子邮件请求?此事件是否触发只能由多个工作人员完成的流程?计数的目的是什么?
-
嗨@JeanJacquesGourdin 我正在运行一个 haraka 邮件服务器,它将侦听任何电子邮件请求并将其发送到特定域,如 gmail 或 yahoo,在服务器中我绑定我的自定义 IP 并将其发送到它目的地,所以现在我只想绑定一个特定的 IP 固定次数
标签: node.js multithreading redis node-redis redlock