【问题标题】:Is REDIS Pub/Sub apt for moderate size binary data?REDIS Pub/Sub 是否适合中等大小的二进制数据?
【发布时间】:2012-12-21 14:59:11
【问题描述】:

我有一些工作计划通过REDIS Pub/Sub 发送给员工。工作涉及处理图像(JPEG,20KB-800KB,通常在 150KB 左右)。

直接将图像作为消息的有效负载发送是个好主意吗?

【问题讨论】:

  • 我不会这样做。这大大增加了你的 redis 的负载,有更好的工具来传输图像。您甚至可以将图像存储在文件系统上,并让 nginx 将其流式传输给工作人员。性能应该具有可比性。
  • @SergioTulentsev:这实际上是我正在考虑的替代方案,但我不确定是否有必要。它会给我的系统增加复杂性和额外的故障点。
  • 当然,它会增加一个额外的组件和一个额外的故障点(这是一个相当积极的事实。SPOF 很糟糕,m'kay?:))。 Nginx 文件流具有很强的可扩展性。但是如果你只使用 redis,如果 redis 实例在负载下开始崩溃,你会采取什么措施?

标签: redis publish-subscribe


【解决方案1】:

我根本不认为这是一个问题。如果您确信您的订户/工作人员将能够跟上并且您不会冒用完 RAM 的风险,那么我认为这是一种有效的方法。我不知道它是否比建议的 nginx 流式传输更好,但作为内存数据存储 redis 的扩展应该非常接近硬件和网络限制。

请记住,redis pub/sub 不是“持久的”,因此如果将图像发布到当前没有人订阅的频道,它将不会被拾取。图像将无处可去。

如果您需要持久性,可以使用 redis 列表非常轻松地构建持久队列。

【讨论】:

    【解决方案2】:

    您可以将JPEG文件通过base64编码成字符串,并将该字符串发布到频道。

    发送数据(payload JPEG 文件)的大小将增加到大约 1.5x 到 2x。

    【讨论】:

    • 不需要,因为“Redis 字符串是二进制安全的,这意味着 Redis 字符串可以包含任何类型的数据,例如 JPEG 图像或序列化的 Ruby 对象。”根据文档
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2019-02-22
    • 2012-08-12
    • 2016-01-18
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多