gpt4 book ai didi

redis - Redis "Pattern: Reliable queue"的代码实现

转载 作者:可可西里 更新时间:2023-11-01 11:23:53 24 4
gpt4 key购买 nike

出色的 redis 文档列出了一个 Reliable queue pattern作为 RPOPLPUSH 函数的一个很好的候选者/示例。

我将“可靠队列”理解为具有像 Amazon SQS FIFO exactly once pattern 这样的交付模式的东西.

具体来说,您有一些 N 个进程向一个队列中提供数据,而一些 M 个工作进程从该队列中工作。这实际上看起来像什么实现?

我会冒险做这样的事情:

使供给进程填充工作队列。

# feeder1

import redis
import datetime
import time

r = redis.Redis(host='localhost', port=6379, db=0)
while True:
now = datetime.datetime.now()
value_to_work_on = "f1:{}".format(now.second)
r.push('workqueue', value_to_work_on)
time.sleep(1)

再做一个

# f2
import redis
import datetime
import time

r = redis.Redis(host='localhost', port=6379, db=0)
while True:
now = datetime.datetime.now()
value_to_work_on = "f2:{}".format(now.second)
r.push('workqueue', value_to_work_on)
time.sleep(1)

现在制作 worker

# worker1
import redis

r = redis.Redis(host='localhost', port=6379, db=0)

def do_work(x):
print(x)
return True

while True:
todo = r.rpoplpush("workqueue" "donequeue")
if do_work(todo):
print("success")
else:
r.push("workqueue", todo)

# worker2 is exactly the same, just running elsewhere.

我的问题是:

  1. 这通常是文档中的意思吗?如果没有,你能提供一个修复作为答案吗?
  2. 这似乎仍然不完整且不可靠。例如,是否应该有错误队列和完整队列的替代列表?每个可能的错误状态一个?如果您的 Redis 在处理过程中出现故障会怎样?

最佳答案

作为 @rainhacker pointed out in comments,现在建议为此使用 Redis Streams 而不是“模式:可靠队列”中描述的配方

关于redis - Redis "Pattern: Reliable queue"的代码实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562175/

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