标题要求一切。我正在构建的站点的内容不会很快改变,因此Memcache可能会存储数月的数据,除非我发布更新。有没有办法在每次部署站点时清除缓存?我正在使用Python运行时。
更新1
使用jldupont的answer我在主请求处理脚本中放入了以下代码…
更新2
我已切换到所选答案注释中Koen Bok提到的方法,并在所有memcache键前加上os.environ['CURRENT_VERSION_ID']/
和answer第二次更新中的有用代码。这个解决方案似乎比我之前发布的函数优雅得多。
Tags:
你试过
flush_all()
函数吗?Docs here。您将需要一点逻辑状态来检测新的部署,或者需要一个特殊的脚本来执行刷新。已更新:查看其中一个脚本的绝对路径:每次部署时都会更改此路径。您可以使用http://shell.appspot.com/进行实验:
查看带有/shell/1.335852500710379686/的行。
所以,只需保留这个部署状态变量的快照(在memcache中;-)并进行比较,就可以执行刷新操作。
更新2:根据@Koen Bok的建议,还可以使用环境变量CURRENT_VERSION_ID(也是脚本文件绝对路径的一部分)。
我还没有测试过,但如果你在实例启动时在memcache中插入一个版本为#的密钥。
然后当下一个实例启动时,也就是在部署之后,它将检查memcache及其本地版本(如果它们不同),刷新所有并重新初始化密钥。
唯一的缺陷是,如果密钥被逐出,可能会将memcache替换为datastore,但随后会为每个实例启动调用datastore。
=编辑=
从app.yaml添加到您调用的python文件的顶部
为缓存值创建键时,请在键中包含执行缓存获取/设置的文件的版本。这样,当文件的新版本存在时,它将不再引用缓存中的旧版本-它们将自行过期。
我们使用CVS和java,因此我们在将要进行缓存的每个文件中声明此变量:
当您签出该文件时,您将得到如下信息:
如果不是CVS,您可以适应您的语言和版本控制系统。记住用你的钥匙来编码特殊的字符。我们发现URL编码键值对memcached很有效。
相关问题 更多 >
编程相关推荐