我使用Google App Engine提供的User
课程:from webapp2_extras.appengine.auth.models import User
我想在Google云端控制台中对通过数据存储的用户实例进行一些更改:将name
的{{1}}属性更改为其他内容。
据我所知,User
对象以某种方式缓存。如果我直接在数据存储中进行更改,如何在memcache中找到它并将其删除?我的目标是强制刷新缓存的User
对象。
答案 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'(未找到)。不确定为什么会这样。