【问题标题】:GAE webapp2_extras session memory limits (storing a temporary image in a session)GAE webapp2_extras 会话内存限制(在会话中存储临时图像)
【发布时间】:2012-11-13 22:24:14
【问题描述】:

webapp2_extras 的会话非常有用,我一直在使用它们来保持用户登录等。但是没有太多关于它的文档。例如:会话字典中条目的内存限制是多少?

到目前为止,我已经存储了字符串和数字。但是我需要存储从 HTML 表单上传的整个图像(这个想法是这个图像是临时的,它可能会被丢弃,所以我不想将它存储在数据存储中,直到我确定我必须这样做它)。它似乎不起作用,我想我遇到了内存问题:

self.session['photo_image']  = self.request.get("photo_image")

是这样吗?我想有内存限制,但我找不到它们。我还能如何在 GAE 中存储临时图像?

【问题讨论】:

  • Cookie 大小至少为:每个 cookie 4096 字节,但规范中没有限制。

标签: image google-app-engine session webapp2


【解决方案1】:

您可以将其存储在“实例内存”中,例如在脚本启动时创建一个全局列表并将传入的图像附加到该列表中,然后在完成后将其删除。当然,如果你有很多用户/大文件,你很快就会耗尽内存。当实例关闭时,您将失去一切,如果有多个实例正在运行,您(可能)会遇到问题。

所以 Memcache 听起来很适合这个。 using Memcache

 def get_data():
    data = memcache.get('key')

    if data is not None:
        return data
    else:
        data = self.query_for_data()
        memcache.add('key', data, 60)
        return data

是的,它不是 100% 可靠的,我相信您已经听说过,但如果您不使用 100 个巨大的文件并将它们保存很长时间,您可能不会遇到问题。因为它是先进先出(IIRC),如果您或多或少地处理它们以便更不可能丢失数据。我认为 memcache 将是你最好的选择,试试吧。

【讨论】:

  • 我当前的解决方案包括向用户模型添加一个“temporal_image”字段:它包含每个用户当前正在上传的图像。但它需要写入和读取数据存储,这是我试图避免的。所以我会先尝试你的解决方案。谢谢!
  • 啊,等等:“序列化的键和值的组合大小必须最多为 1 兆字节。”所以不,memcache 不是一个选项,我担心 :(
  • 这是每件商品,不是总数,别忘了!你可以按照这里的描述把它分成几部分:stackoverflow.com/questions/9127982/… 所以它真的没有那么糟糕。
  • 对,对,我知道它是按项目计算的。但这些都是相当大的图像(至少超过 1Mb,我担心)。没错,我可以将它们分成更小的部分,但这样做似乎更不可靠......我认为我应该坚持使用数据存储 X(
  • TBH 你应该先尝试一下,看看它到底有多不可靠。我已经使用 memcache 在一天内完成了 1/4 百万次交易,没问题。如果您将它用作数据存储的替代品,它可能不可靠,但如果您按预期使用它,那么您应该没问题!但随你喜欢!
猜你喜欢
  • 2013-10-13
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多