gpt4 book ai didi

java - 在 memcache 中缓存单例

转载 作者:行者123 更新时间:2023-12-01 15:21:10 25 4
gpt4 key购买 nike

我从一年前就开始在 Google App Engine 中进行开发,并且我了解实例的预热时间有多么重要。所以我最终产生了一个想法:是否可以在内存缓存中缓存单例?例如,我正在为 JDO PersistenceManagerFactory 使用单例模式。

这是我的实际代码(如文档中所述):

    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>);

最佳答案

编辑:刚刚找到此链接,根据 Ikai Lan 的说法,不同的实例似乎无法共享 PersistenceManagerFactory 实例 https://groups.google.com/group/google-appengine-java/browse_thread/thread/1b90fae408b52d49

================================================== ===========================

我喜欢这个想法,并且我立即尝试了我的代码,但不幸的是我遇到了一些这样的错误:

javax.jdo.JDOFatalUserException: No available StoreManager found for the datastore URL key "". Please make sure you have all relevant plugins in the CLASSPATH (e.g datanucleus-rdbms?, datanucleus-db4o?), and consider setting the persistence property "datanucleus.storeManagerType" to the type of store you are using e.g rdbms, db4o

也许这只是我的问题,但目前我还无法判断。

我对此进行了更多思考:

因此,我们假设您建议的方式有效,并且您可以获得所需的正确工厂。真正的性能将取决于您如何使用内存缓存。

1) 如果您的内存缓存中有大量写入,则意味着 PersistenceManagerFactory 可能会频繁地从缓存中踢出,这意味着您需要重新创建它。

2)每次创建一个新的 PersistenceManagerFactory 时,您都会将其放入缓存中,根据我处理 GAE 的经验,该缓存非常不稳定,有时放入部分可能需要比您预期的时间长得多的时间。

关于java - 在 memcache 中缓存单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com