【发布时间】: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