gpt4 book ai didi

transactions - Redis:具有多个键的事务

转载 作者:IT王子 更新时间:2023-10-29 06:11:20 25 4
gpt4 key购买 nike

我正在使用 Spring Data Redis。 Redis 中的基本数据模型是

job:包含作业数据的哈希。

queue:包含用作队列的作业 ID 的列表。

新作业将保存在job 哈希中,并将其推送到queue。我们有多个工作客户端汇集 queue 以通过弹出 id 并从哈希中读取详细信息来使用新的作业 id。

现在,我正在尝试根据工作数据中的某些标志制定一项新功能,即某些工作人员只能使用某些工作。问题是 worker 只有在阅读了它的详细信息后才能知道它是否可以使用该作业,而不是在从队列中获取 id 时才知道。

我本来以为我可以把这个操作序列放到一个事务中,

  1. 查看队列。
  2. 从哈希中读取作业详情并检查是否可消费。
  3. 如果是,从队列中取出它的id,否则什么也不做。

然而,这种交易涉及队列和哈希数据。阅读 Redis 的事务支持后,我不确定这是否可以实现。请帮助建议我应该采取什么方法。

最佳答案

如果你想避免轮询/偷看/竞争条件,你可以考虑以下几点:

  1. 将您现有的队列维护为通用输入队列,并有一个轻量级的分类类型工作器(一个可能就足够了,但您可以有更多的冗余)从该队列中弹出项目,使用阻塞弹出来避免轮询,并且根据您的工作分配逻辑,将新项目推送到每个工作人员类型的单独队列中

  2. 创建多个 worker,每个 worker 从自己的 worker 类型队列中阻塞 pops

将您的队列分成多个队列的一个好处是您可以更清楚地监控您的监控,因为您可以检查每个队列的长度并查看哪些类型的工作进程运行缓慢

它可能不适合生产使用,但您可能对 Disque 感兴趣,一个内存中的分布式作业队列,由与 Redis 相同的作者创建(并且基于 Redis 代码)。

关于transactions - Redis:具有多个键的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com