gpt4 book ai didi

heroku - Heroku-Redis内存> 'maxmemory',在hobby:dev中有一个20MB的文件,应该是25MB

转载 作者:行者123 更新时间:2023-12-03 06:42:33 24 4
gpt4 key购买 nike

因此,我试图通过Celery上传一个文件,该文件在我的Heroku网站上使用Redis。我正在尝试上传.exe大小的20MB类型文件。 Heroku在他们的爱好中说:dev部分,可以上载的最大内存是25MB。但是我试图在Celery中上载文件(将其从字节转换为base64,对其进行解码并将其发送给函数)正在获得kombu.exceptions.OperationalError: OOM command not allowed when used memory > 'maxmemory'.错误。请注意,当我尝试上传5MB文件时,它可以正常工作。但是20MB没有。我在Flask框架中使用Python

最佳答案

有两种方法可以将文件存储在数据库中(Redis只是内存数据库)。您可以将blob存储在DB中(对于较小的文件,例如几个KB),也可以将文件存储在内存中,并将指向文件的指针存储在DB中。

enter image description here

因此,根据您的情况,将文件存储在磁盘上,仅将文件指针放在数据库中。

这里的问题是Heroku的Ephemeral file system每24小时或在您部署新版本的应用程序时都会被删除。

因此,您必须执行以下操作:

  • 编写一个小函数来将文件存储在本地磁盘上(这是临时存储),并将路径返回到文件
  • 使用文件路径将任务添加到Celery,即Celery任务的参数将是“文件路径”,而不是20MB数据的序列化blob。
  • Celery工作进程在空闲时选择刚入队的任务并执行。

  • 如果您以后需要访问文件,并且由于本地heroku磁盘仅具有临时性,则必须将文件放置在某些永久性存储中,例如AWS S3。

    (我们经过所有这些步骤而不将文件直接放置在S3中的原因是,由于S3磁盘可能位于其他位置的其他服务器场中,因此对本地磁盘的访问速度很快,并且将文件保存在那里需要花费时间。并且如果您尝试在主流程中将文件写入S3,则您的Web流程可能显示为缓慢/卡死状态。)

    关于heroku - Heroku-Redis内存> 'maxmemory',在hobby:dev中有一个20MB的文件,应该是25MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963217/

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