2

使用 com.google.appengine.api.memcache.MemcacheService 在 App Engine 中进行缓存,我正在使用工厂创建 memcacheservice 实例,并将其作为单例注入到我的类中。

我在问这是否正确和最优,以及是否有人对使用惰性初始化选项或同步()的积极或消极影响有意见。我希望这个问题的答案能够以这种方式使用 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;

    }



}

春豆:

 <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>
4

1 回答 1

1

该解决方案可行,但存在问题:

  1. 您应该清楚地了解它不是一个完整的单例,因为每个实例都会有自己的工厂实例。

  2. 它将影响动态实例的开始时间。有一个已知问题是每个 spring bean 都会在实例开始时间上增加一些时间。因此,如果您的 HTTP 请求将导致实例启动,则请求启动和实际响应过程之间会有延迟。在过去的几次中,很多人都遇到了这个问题;个月。实例启动甚至可以超过 60 秒,您将遇到硬期限异常。所以建议不要使用 Spring 来加快启动时间。查看http://code.google.com/p/googleappengine/issues/detail?id=7706了解详情。

于 2012-10-17T16:51:08.847 回答