【问题标题】:Google App Engine - Memcache expirationGoogle App Engine - 内存缓存过期
【发布时间】:2017-06-23 01:51:49
【问题描述】:

我在我的应用程序中使用 Google App Engine,并且为了降低数据存储成本,我广泛使用 memcache。

下面给出的 sn-p 示例,

val = memcache.get('forum')
if val is None:
      val = 'stackoverflow'
      memcache.add('forum', val, time=600)

return val 

我设置的过期时间为 10 分钟(600/60 = 10 分钟),10 分钟后该值不在缓存中,但在应用引擎 memcache 文档中,它说这些值不会被逐出如下(因为时间只是一个可选参数)

add(key, value, time=0, min_compress_len=0, namespace=None)源集 一个键的值,如果项目不在内存缓存中。

参数 key -- 要设置的键。有关详细信息,请参阅客户端上的文档。

value -- 要设置的值。任意种类。如果复杂,将被腌制。

时间 -- 可选 过期时间,从当前时间开始的相对秒数 (最多 1 个月),或绝对的 Unix 纪元时间。默认情况下,项目 永不过期,尽管由于内存压力,项目可能会被驱逐。 浮点值将四舍五入到最接近的整数秒。 min_compress_len -- 为兼容而忽略选项。命名空间——一个 指定在请求中使用的可选命名空间的字符串。退货 如果添加则为真。错误时为 False。

我也在使用专用内存缓存,它说项目永远不会过期,但在我的情况下,当我设置时间时项目会过期(例如:time=600s),为什么会这样??

【问题讨论】:

  • 您包含的文档文本说默认是永不过期,但是您提供了一个时间,所以它会。换句话说,因为您提供了时间参数,所以您正在覆盖默认行为。
  • 谢谢蒂姆,我认为它是一个可选参数——尽管我们指定了它——项目只会由于内存压力而过期。您确定吗,如果我们指定时间 - 项目将在该时间后过期。由于我的谷歌应用引擎成本非常高 - 我正在寻找一种优化它的方法,将所有数据移动到内存缓存以延长 1 天的到期时间,我可以知道这样做是否是个好主意吗??
  • 您在最初的问题中说:“但是在我的情况下,当我设置时间(例如:time=600s)时,项目会过期,为什么会这样??”从您最初的描述来看,它按记录工作。排除该选项将意味着它永不过期。

标签: google-app-engine caching memcached


【解决方案1】:

来自How cached data expires(强调我的):

应用可以在存储值时提供过期时间,如 相对于添加值时的秒数,或者作为 未来的绝对 Unix 纪元时间(从 1970 年 1 月 1 日午夜)。 不迟于这个值被驱逐 时间,尽管它可以因其他原因提前被驱逐。

【讨论】:

  • 是的,我读过它,如果我们提供过期时间 - 价值将在时间完成后被驱逐,我的谷歌应用引擎成本非常高 - 我正在寻找优化的方法它,将所有数据移动到 memcache 以获得更长的 1 天到期时间,我可以知道这样做是否是个好主意吗??
  • 您的数据库成本会下降,但您的内存缓存成本会上升。 1.44 美元/GB/天(相当于 240 万次实体读取)可能值得(或不值得),具体取决于您的数据结构及其使用模式(缓存命中率、项目大小等)。在我的情况下,我更喜欢常规的内存缓存(免费),但只缓存了选定的(高度使用的)数据,没有过期时间(如果合适的话)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多