redis - Redis“模式:可靠队列”的代码实现
问题描述
优秀的 redis 文档列出了可靠队列模式作为 RPOPLPUSH 函数的良好候选者/示例。
我将“可靠队列”理解为具有交付模式的东西,例如Amazon SQS FIFO 恰好一次模式。
具体来说,您有一些 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)
现在让工人
# 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.
我的问题是:
- 这通常是他们在文档中的意思吗?如果没有,你能提供一个修复作为答案吗?
- 这似乎仍然不完整,也不是很可靠。例如,是否应该有错误队列和完整队列的替代列表?每个可能的错误状态都有一个?如果您的 Redis 在处理过程中出现故障会发生什么?
解决方案
正如@rainhacker 在评论中指出的那样,现在建议为此使用 Redis Streams 而不是“模式:可靠队列”中描述的配方
推荐阅读
- python - 如何计算列表中的所有负数
- r - 显示多个成对比较的多个箱线图
- typescript - 如何在 Typescript 中为这个 reduce 函数定义好的类型
- python - 如何操作存储多个numpy数组的变量
- python - 在curve_fit中缺少1个必需的位置参数,即使我将它们全部通过
- json - API 发布响应成功后导航到下一页?
- c# - 为什么物体到达第一个航路点而不是移动到下一个航路点后,它会围绕当前航路点转圈?
- ios - 如何在 iPhone 上安装未签名的 iOS 版本?
- batch-file - 如何批量提取具有指定偏移量的部分字符串?
- data-visualization - Vega Visualization timeunit hoursminutes 错误的顺序