2012-06-26 180 views
2

我是GAE的memcache的新手,我需要幫助。 基本上,我有一個數據存儲超過了數據存儲讀取操作限制,因爲我沒有使用memcache。我的數據存儲的寫入很少,但讀取次數很多,每次寫入時都應該可用於讀取。因爲,該網站已經啓動,我需要一個快速解決方案,所以我需要一個設計幫助。所以,事情是,無論何時在數據存儲中寫入新條目都應該獲得memcached。還有一件事我想知道如何將數據存儲複製到memcache。與此同時,我正在研究它,但自從該網站上線以來,我在這裏問它,而沒有任何代碼。Google App引擎memcached設計

感謝

UPDATE:

的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()); 
     } 

回答

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 

您可以使用相同的功能,從內存緩存讀取,然後將數據寫入 內存緩存

例如:

從內存緩存讀取: -

arts = top_arts() 
寫入到數據庫時

: -

#write your entry in database 
<some database code> 
#update memcache with this new entry 
top_arts(update=True) 
+0

基本上,我使用Java,但它不會有太大的不同。我會試試看。 – piyush

+0

在java中,它看起來並不簡單。我希望將作爲JDO對象的數據存儲查詢結果作爲memcached,但我無法對其執行序列化。對此有何建議? – piyush