2012-06-26 126 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