1

我想使用redis,但我希望能够限制允许获取键值的客户端......

这个想法是一台主机,它以pythonic dict throgh redis的形式传输“任务”,并且只允许一个客户端/工作人员获取它,无论哪个工作人员,只有一个工作人员会得到它。

我尝试寻找一种私下通信的方式,以便主机能够为工人提供密钥,这将是一个 uuid,这样只有一个工人会得到它......虽然找不到办法。

非常感谢!

4

1 回答 1

0

您不需要特定的权限管理来将给定的工作负载分配给一组工作人员,以便一个项目仅由一个工作人员处理:您只需要一个排队系统。

您可以轻松地在 Redis 之上构建一个,使用列表数据类型,以及 LPUSH/RPUSH 等原语来排队,以及 BRPOP/BLPOP 以阻塞模式出列。

您还可以重用众多现有 Python 模块/示例之一:

更新:

如果您需要一个查询-回复机制,并在多个工作人员(例如Gearman)上实现负载平衡,这仍然可以使用 Redis 实现(即使它可能不是最有效的方法)。

客户端进程可以在启动时生成一个 UUID 来标识 itelf。然后它可以使用 RPUSH/LPUSH 将作业推送到 queue:main(主队列)。这些项目应包含有效负载本身,以及其发送者的身份 (UUID)。然后,客户端只需等待 queue:UUID (BLPOP/BRPOP) 上的答案。

如果您想支持流水线(即发送多个查询并等待多个回复),您需要标识项目本身(在发送者之上),以便客户端进程可以安全地关联查询和回复。

工作人员只需从 queue:main (BLPOP/BRPOP) 中取出项目,处理有效负载,检索发送者的 UUID,然后通过将它们推送到 queue:UUID(使用 LPUSH/RPUSH)来返回结果。如果项目被识别,请务必在结果中返回项目的身份。

注意:您不需要显式创建或删除队列。Redis 列表在推送第一项时自动创建,并在弹出最后一项时删除。

于 2013-07-07T08:37:14.760 回答