2

私は GAE の memcache を初めて使用するので、これについて助けが必要です。基本的に、memcache を使用しなかったため、データストアの読み取り操作の制限を超えたデータストアがあります。私のデータストアには最小限の書き込みがありますが、多くの読み取りがあり、書き込みがあるたびに読み取りに使用できるはずです。サイトが稼働しているので、すぐに解決する必要があるため、これには設計の助けが必要です. つまり、データストアに書き込みがあるたびに、新しいエントリが memcached になるはずです。もう 1 つ知りたいのは、データストアを memcache に複製する方法です。並行して、私はそれに取り組んでいますが、サイトがアップしているので、コードを手にせずにここで質問しています。

ありがとう

アップデート:

Java コードは次のようになります。

        MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
        if(memcache.contains("LocationInfo"))
        {
            JSONArray js = new JSONArray((String)memcache.get("LocationInfo"));
            result = new ArrayList<LocationInfo>();

            for(int i = 0; i < js.length(); i++)
            {
                JSONObject jso = (JSONObject)js.get(i);
                LocationInfo loc = new LocationInfo(jso);
                result.add(loc);
            }
        }
        else
        {
           q1= pm.newQuery(LocationInfo.class);
           q1.setFilter(filter);
           result = (List<LocationInfo>)q1.execute();
           JSONArray js = new JSONArray();
            for(LocationInfo loc : result)
            {
                js.put(loc.toJSON());
            }
            memcache.put("LocationInfo", js.toString());
        }
4

1 に答える 1

1
from google.appengine.ext import db
from google.appengine.api import memcache

def top_arts(update = False):
  key = 'top'

  #Getting arts from memcache
  arts = memcache.get(key)
  #Check if key is defined in memcache
  #or an update has been invoked
  if update or not arts:

      #Querying the Google Data store using GQL
      arts = db.GqlQuery('SELECT * from Art ORDER BY created DESC LIMIT 10')
      memcache.set(key, arts)

  return arts

memcache からの読み取りと memcache へのデータの書き込みに同じ関数を使用できます。

例えば:

memcache からの読み取り用:-

 arts = top_arts()

データベースへの書き込み時:-

#write your entry in database
<some database code>
#update memcache with this new entry
top_arts(update=True)
于 2012-06-26T05:40:37.787 に答える