使用 com.google.appengine.api.memcache.MemcacheService 在 App Engine 中进行缓存,我使用工厂创建 memcacheservice 实例,并将其作为单例注入(inject)到我的类中。
我想问的是这是否正确和最佳,是否有人对使用 lazy-init 选项或 synchronized() 的正面或负面影响提出意见。我希望得到这个问题的答案,从而以这种方式使用 memcacheservice 的最佳方式。
谢谢!
工厂:
public class CacheFactory {
private static MemcacheService INSTANCE;
private CacheFactory() {
}
public static MemcacheService getInstance() {
if (INSTANCE == null) {
synchronized(CacheFactory.class){
INSTANCE = MemcacheServiceFactory.getMemcacheService();
}
}
return INSTANCE;
}
}
Spring Bean :
<bean id="cacheFactory" class="com.nimbits.server.transactions.memcache.CacheFactory"
factory-method="getInstance" lazy-init="false" scope="singleton" >
</bean>
示例用法:
<bean id="someService" class="SomeServiceImpl">
<property name="cacheFactory" ref="cacheFactory" />
</bean>
最佳答案
此解决方案可行但存在问题:
你应该清楚地明白它不是一个完整的单例,因为每个实例都会有它自己的工厂实例。
它会影响动态实例的启动时间。有一个已知问题,每个 spring bean 都会增加一些时间到实例启动时间。因此,如果您的 HTTP 请求将导致实例启动,则请求启动和实际响应过程之间会有延迟。在过去的几年里,很多人都遇到过这个问题;个月。实例启动时间甚至可能超过 60 秒,您将遇到硬期限异常。所以建议完全不要使用 Spring 来加快启动时间。检查http://code.google.com/p/googleappengine/issues/detail?id=7706了解详情。
关于java - 使用 Spring 的 Google App Engine GAE MemcacheService 单例注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12938008/