2

App Engine でのキャッシングに com.google.appengine.api.memcache.MemcacheService を使用して、ファクトリを使用して memcacheservice インスタンスを作成し、Spring をシングルトンとしてクラスに注入しています。

これが正しくて最適かどうか、また、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;

    }



}

春豆:

 <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. 動的インスタンスの開始時間に影響します。すべてのSpringBeanがインスタンスの開始時間にいくらかの時間を追加するという既知の問題があります。したがって、HTTPリクエストによってインスタンスが開始される場合、リクエストの開始と実際の応答プロセスの間に遅延が発生します。過去数年間、多くの人がこの問題に直面しました。月。インスタンスの開始は60秒を超える場合があり、厳しい期限の例外が発生します。したがって、開始時間を短縮するために、Springをまったく使用しないことをお勧めします。詳細については、 http://code.google.com/p/googleappengine/issues/detail?id=7706を確認してください。

于 2012-10-17T16:51:08.847 に答える