首页 > 解决方案 > 可序列化文件对象

问题描述

试图得到与此类似的问题的答案。我有一个生成文件(pdf)的芹菜任务,然后需要将其发送回redis,以便API可以将其提供给最终用户。

创建一个可序列化的文件对象的最佳方法是保持文件名属性与之关联?它适用于 bytesIO,但 API 不知道它正在处理的文件,因此不知道在响应中给它什么文件名。

我相信实现这个工作流程的最佳方法是部署 minio 或其他可以处理文件对象生命周期的对象存储。我们已经部署了 redis,并且考虑到对象的生命周期只是几分钟的问题;redis 应该适合这项工作。

标签: pythonrediscelery

解决方案


如果生成的 PDF 文件不是太大,将它们存储在 Redis 中应该很简单。请记住,存储在 Redis 中的所有内容都是二进制 blob。即使它们很大,您也可能会遇到 Redis 完成的一些缓存驱逐。有了聪明的过期策略,一个像样的 Redis 服务器应该没问题。

真正的问题是如果你想将 PDF 文件传递​​给你的 Celery 任务。不要那样做。相反,将 Redis 密钥传递给您的 Celery 任务,以便它知道从哪里获取 PDF 文件的内容(或 S3 密钥,或类似的)。一般来说,这对任何事情都是一个很好的策略(不要将大对象传递给 Celery 任务)。为什么会这样?- 因为任务参数和元数据通常存储很长时间。


推荐阅读