2013-12-18 109 views
1

我在Google App Engine上构建了一个PHP应用程序,为了提高性能,开始使用memcache来缓存模板。它的预期效果非常好,但是我开始发现几小时后,这些物品正从共享缓存中消失。专用memcache项目消失

该文档指出共享内存缓存是尽力而为的,如果内存成为问题,项目将过期。要清楚的是,我们正在存储大约20个每个大约10k的键/值对。

因此,假设这些项目因共享内存缓存而过期,我已升级到适用于我们应用程序的1千兆位专用内存缓存。

我的代码是非常简单和直接的:

$memcached = new Memcached(); 
$memcached->set('mykey', 'mydata', 1296000); 

上面的代码应设置该密钥和数据的15天到期。 GAE文件表明最长为30天。

当我运行代码时,它的效果很好,并按预期设置了键/数据。但是,当我在早上睡觉并醒来时,应用程序管理员中的memcache查看器会说什么?

最旧的项目年龄:1小时(一个或多个)46分钟(S)26秒

什么赫克?没有任何代码正在刷新或删除,这是一个专用的内存缓存。

我在做什么错?它确实看起来像是导致memcache过早失效。这是一个非常低量的应用程序,所以从我设置这个时间到检查它(根据日志)时,只有1次访问(大约1小时46分钟前)。

如果实例关闭,如果它是最后一个驻留实例,它是否清除memcache?

感谢您提供的任何帮助。

+0

看起来很奇怪。尝试将其设置为“0”以查看这些项目是否永久缓存。顺便说一下,30天的时间应该是使用秒数时的最大值。使用时间映射可以设置更大的过期时间 – tlenss

回答

1

它可能不是您认为的那样,该字段可能不是您的物品消失的指标。

一个特别有趣的统计数据是“最古老的项目年龄”。这有点不恰当:它实际上是自上次访问最近访问的项目以来的时间量,而不是该项目的完整时间。

这不是GAE文档,我在编程Google Appengine书中找到了这个。

2

这是否每晚都发生?你可能只是不幸运而已。

如果后端服务器重新启动,缓存将被刷新。例如对于软件更新,服务器崩溃。

Memcache没有写入磁盘,因此您的代码需要处理这种情况,但应该不经常发生。