gpt4 book ai didi

redis - 我可以使用 lpop/rpop 和 Redis 创建一个简单的队列系统吗?

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

我尝试了几种消息/作业队列系统,但它们似乎都增加了不必要的复杂性,而且我总是以队列进程无缘无故死机和神秘的日志消息告终。

所以现在我想用 Redis 制作自己的队列系统。你会怎么做?

据我所知,Redis 很好,因为它有 lpop 和 rpush 方法,还有一个发布/订阅系统,可以用来通知工作人员有新消息要使用。这是正确的吗?

最佳答案

是的,你可以。事实上,有很多包可以做到这一点......包括CeleryRQ用于 Python 和 resque对于 Ruby 和 resque 到 Java(Jesque 和 Javascript(Coffee-resque))的端口。

还有 RestMQ它是用 Python 实现的,但设计用于任何 ReSTful系统。

还有很多。

请注意,Redis LIST 是最简单的网络队列系统。然而,让事情在 Redis 提供的简单原语上变得健壮是非常重要的(并且对于“健壮”的某些值来说可能是不可能的——至少在服务器端)。许多这些将 Redis 用作队列的库添加了旨在最大限度地减少丢失消息的机会,同时确保“最多一次”语义的功能和协议(protocol)。其中许多使用 RPOPLPUSH Redis 原语在辅助 LIST 上进行一些其他处理,以处理已完成工作的确认和“丢失”单元的重新调度。 (考虑一些客户从队列中“弹出”一个工作单元并在工作结果发布之前死亡的情况;您如何检测和缓解这种情况?)

在某些情况下,人们精心制作了一些服务器端 (Redis Lua EVAL) 脚本来处理更可靠的排队。例如实现 RPOPLPUSH 之类的东西,但用 ZADD 替换“推送” (因此将项目和时间戳添加到表示“正在进行的工作”的“排序集”)。在这样的系统中,工作以 ZREM 完成。并使用 ZRANGEBYSCORE 扫描“丢失”的作品.

以下是 Salvatore Sanfilippo(又名 antirez,Redis 的作者)关于实现稳健队列系统的一些想法:Adventures in message queues他讨论了促使他从事 disque 工作的考虑因素和力量.

我相信您会发现一些批评者认为 Redis 不能很好地替代“真正的”消息总线和队列系统(例如 RabbitMQ)。 Salvatore 在他的“博客条目”中说了很多,我欢迎其他人在这里阐明偏爱此类系统的令人信服的理由。

我的建议是在早期原型(prototype)制作期间从 Redis 开始;但要将您对系统的使用抽象为一些统一的代码。 Celery 等实际上为您做到了这一点。您可以开始将 Celery 与 Redis 后端一起使用,并轻松地将后端替换为 RabbitMQ 或其他对您的大部分代码几乎没有影响的后端。

如需备选方案目录,请考虑仔细阅读:http://queues.io/

关于redis - 我可以使用 lpop/rpop 和 Redis 创建一个简单的队列系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562403/

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