2017-12-04 17 views
2

私はGoogle App Engineのによって提供されるこのUserクラスを使用します。from webapp2_extras.appengine.auth.models import UserGoogle App Engineにキャッシュされたユーザーオブジェクトを更新するにはどうすればよいですか?

私は、Googleのクラウドコンソールでデータストアを介したユーザーのインスタンスにいくつかの変更をしたい:何か他にUsername属性を変更します。

私が知る限り、Userオブジェクトは何らかの形でキャッシュされています。私がデータストアで直接変更を行った場合、どのようにしてmemcacheでそれを見つけて削除できますか?私の目標は、キャッシュされたUserオブジェクトを強制的にリフレッシュすることです。

+0

これはオプションかもしれません。https://stackoverflow.com/a/10051668/6017784 – danielx

答えて

1

使用memcacheのキーがgoogle.appengine.ext.context.pyで見つけることができます:Context.get():

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

(少なくとも私のバージョンで)接頭辞は 'NDB9:' です。ですから、のようなものを使用することができますmemcacheのキーを取得するには:削除するには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) 

警告:このようなものになり

from google.appengine.ext import ndb 

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

をmemcache.getせずに() memcache.delete()の前に呼び出すと、削除結果は常に対話型コンソールを使って '1'(見つからない)でした。なぜそうなのかわからない。

関連する問題