我想使用redis,但我希望能够限制允许获取密钥值的客户端...
这个想法是一个主要的机器,以pythonic dict throgh redis的形式传递'任务',只允许一个客户/工人得到它,哪个工人,只有一个工人会得到它并不重要
我试图寻找一种私密沟通的方式,这样主机就可以给工人一把钥匙,这将是一个uuid,这样只有一个工人才能得到它......虽然找不到办法
非常感谢!
答案 0 :(得分:0)
您不需要特定的权限管理就可以将给定的工作负载分配给一组工作人员,这样一个项目只能由一个工作人员处理:您只需要一个排队系统。
您可以使用list data type轻松地在Redis上构建一个,并使用LPUSH / RPUSH等基元进行排队,并使用BRPOP / BLPOP在阻塞模式下出列。
您还可以重用众多现有Python模块/示例中的一个:
<强>更新强>
如果你需要一个查询 - 回复机制,对几个工作者进行负载均衡(类似Gearman),这仍然可以用Redis实现(即使它可能不是最有效的方法)
客户端进程可以在启动时生成UUID以识别它自己。然后它可以使用RPUSH / LPUSH将作业推送到队列:main(主队列)。这些项目应包含有效负载本身,以及其发件人的身份(UUID)。然后,客户端只需等待队列上的答案:UUID(BLPOP / BRPOP)。
如果您想支持管道传输(即发送多个查询并等待多个回复),您需要自己识别项目(在发件人之上),以便客户端进程可以安全地关联查询和回复。
工作人员只是从队列中取出项目:main(BLPOP / BRPOP),处理有效负载,检索发送方的UUID,并通过将它们推送到队列返回结果:UUID(使用LPUSH / RPUSH)。如果标识了项目,请务必返回包含结果的项目标识。
注意:您无需显式创建或删除队列。按下第一个项目时会自动创建一个Redis列表,并在弹出最后一个项目时将其删除。