自从一年前我开发Google App Engine并且我了解实例的热身时间有多重要。 所以我最终提出了一个想法:是否有可能在memcache中缓存单例?例如,我为JDO PersistenceManagerFactory使用了单例模式。在memcache中缓存单例
这里是我的实际代码(如文档中所述):
private static PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory(<my-name>);
是否有任何意义类似延长的JDOHelper,写这样一个功能:
public static PersistenceManagerFactory getPersistenceManagerFactoryCached(String name) {
MemcacheService cache = MemcacheServiceFactory.getMemcacheService();;
PersistenceManagerFactory staticPMF= null;
if (cache.contains("JDO_PMF")) {
staticPMF = (PersistenceManagerFactory) cache.get("JDO_PMF");
} else {
staticPMF = JDOHelper.getPersistenceManagerFactory(name);
cache.put("JDO_PMF", staticPMF);
}
return staticPMF;
}
我的想法应缓存PersistenceManagerFactory以加速第一个实例,然后将其作为单例使用:
private static PersistenceManagerFactory pmfInstance = JDOHelperCached.getPersistenceManagerFactory(<my-name>);
如果您担心开销,请停止使用JDO。 PMF必须加载一大堆与您的应用无关的数据 - 使用更适合该任务的内容,如Objectify,将会避免这种情况。 –