每次部署站点时,如何使用Google App Engine清除内存缓存?

don*_*nut 25 python deployment google-app-engine memcached caching

标题要求一切.我正在建立的网站上的内容根本不会很快改变,所以Memcache可能存储数据数月,除非我提出更新.有没有办法在每次部署网站时清除缓存?我正在使用Python运行时.

更新1

使用jldupont答案我将以下代码放在我的主要请求处理脚本中......

更新2

我已经切换到Koen Bok在所选答案的注释中提到的方法,并os.environ['CURRENT_VERSION_ID']/答案的第二次更新中将所有我的memcache键和有用的代码作为前缀.这个解决方案似乎比我之前发布的功能更优雅.

jld*_*ont 21

你试过flush_all()功能吗?文档在这里.您需要一些逻辑和状态来检测新部署或使用特殊脚本来执行刷新.

更新:查看您的某个脚本的绝对路径:每次部署时都会更改.您可以使用http://shell.appspot.com/进行实验:

  import sys
  sys.path
Run Code Online (Sandbox Code Playgroud)

['/ base/python_dist/lib/python25.zip','/ base/python_lib /versions/third_party/django-0.96','/ base/python_dist/lib/python2.5 /','/ base/python_dist/lib /python2.5/plat-linux2','/ base/python_dist/lib/python2.5/lib -tk','/ base/python_dist/lib/python2.5/lib-dadload','/ base/python_lib /版本/ 1','/ base/data/home/apps/shell/1.335852500710379686 /']

使用/shell/1.335852500710379686/查看该行.

因此,只需保留此部署状态变量的快照(在memcache ;-)中进行比较,以便进行刷新操作.

更新2:正如@Koen Bok所建议的那样,环境变量CURRENT_VERSION_ID也可以使用(也是脚本文件的绝对路径的一部分).

 import os
 os.environ["CURRENT_VERSION_ID"]
Run Code Online (Sandbox Code Playgroud)

  • 为什么不从环境变量中获取CURRENT_VERSION_ID?并且使用上述方法为每个请求添加一个额外的memcache查找,然后为缓存键添加前缀更快. (6认同)
  • 部署后,可以使用remote_api_shell.py运行flush_all().这是手动的,但很简单. (2认同)