如何刷新在Google App Engine中缓存的用户对象?

时间:2017-12-04 07:00:05

标签: python google-app-engine

我使用Google App Engine提供的User课程:from webapp2_extras.appengine.auth.models import User

我想在Google云端控制台中对通过数据存储的用户实例进行一些更改:将name的{​​{1}}属性更改为其他内容。

据我所知,User对象以某种方式缓存。如果我直接在数据存储中进行更改,如何在memcache中找到它并将其删除?我的目标是强制刷新缓存的User对象。

1 个答案:

答案 0 :(得分:3)

使用的memcache密钥可以在google.appengine.ext.context.py中找到:Context.get():

if use_memcache:
  mkey = self._memcache_prefix + key.urlsafe()

前缀(至少在我的版本中)是'NDB9:'。因此,要获取内存缓存密钥,您可以使用类似的内容:

from google.appengine.ext import ndb

key = ndb.Key('User', 5229916580741120)
mkey = 'NDB9:' + key.urlsafe()
print mkey

这导致类似:NDB9:ahpzfmR5bmFtaWMtdHJhdmVsbGVyLTItdGVzdHIRCxIEVXNlchiAgIDAzZKlCQw

要删除:

from google.appengine.api import memcache
value = memcache.get(mkey)
result = memcache.delete(mkey)
print "Memcache delete result={}".format(result)
if result == 2:
  print "{} memcache value has been deleted".format(key)
elif result == 1:
  print "{} memcache value not found".format(key)
else:
  print "Failed to delete {} memcache value".format(key)

警告:在memcache.delete()之前没有memcache.get()调用,使用交互式控制台删除结果总是为'1'(未找到)。不确定为什么会这样。