3

私はmemcachedの使用法などについて学び、昨日からいくつかの希少なリソースを読んでセットアップしようとしています。私が持っているものを示すことから始めましょう。

  1. インストールされたmemcachedサーバー
  2. ここで説明するように春用に構成されています:

    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
        <import resource="simplesm-context.xml" />
        <aop:aspectj-autoproxy />
    
        <bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
              <property name="cacheClientFactory">
                    <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
              </property>
              <property name="addressProvider">
                    <bean class="com.google.code.ssm.config.DefaultAddressProvider">
                         <property name="address" value="127.0.0.1:11211" />
                    </bean>
              </property>
              <property name="configuration">
                    <bean class="com.google.code.ssm.providers.CacheConfiguration">
                          <property name="consistentHashing" value="true" />
                    </bean>
              </property>
         </bean>
    </beans>
    
  3. スプリングを介してサーバーへの接続が正常に作成されました:

    20:06:07,864 WARN  [main] (XMemcachedClient.java:645) - XMemcachedClient use Text protocol
    20:06:08,112 WARN  [main] (AbstractController.java:372) - The Controller started at localhost/127.0.0.1:0 ...
    20:06:08,139 WARN  [Xmemcached-Reactor-0] (MemcachedConnector.java:239) - Add a session: 127.0.0.1:11211
    

次のステップはそれをテストすることでした。これはmemcachedについての良い/簡単な説明を提供します:http://www.majordojo.com/2007/03/memcached-howto.php

私はこのビットを試してみたかった:

Class Foo {
    public static findById(id) {
            if (obj = memcached.get(id)) return obj;
            obj = loadFromDatabase(id);
            memcached.put(id,obj);
            return obj;
        }
}

しかし、このサイトのどこにも、どのタイプのオブジェクトがmemcachedであるかは示されていません。だから私は以下を試してみました:

import net.rubyeye.xmemcached.MemcachedClient

Class Foo {
        @Autowired
    MemcachedClient defaultMemcachedClient;
        public static findById(id) {
                if (obj = memcached.get(id)) return obj;
                obj = loadFromDatabase(id);
                memcached.put(id,obj);
                return obj;
            }
    }

ログから取得したエラーは次のとおりです。

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [net.rubyeye.xmemcached.MemcachedClient] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency

defaultMemcachedClientBeanはmemcachedクライアントになるはずだと思いました。明らかにそうではありません。私はここで何をしますか?誰かが考えを持っていますか?リンク?助言?なんでも?

4

1 に答える 1

2

defaultMemcachedClient Beanはキャッシュタイプであり、xmemecachedとは何の関係もありません。

memcachedを直接使用する場合は、 SimpleSpringMemcachedを使用しないでください。SSMは、インターセプター(AOP)と注釈を使用したキャッシュ用です。あなたの場合:

public class Foo {
    // cache for 1 hour
    @ReadThroughSingleCache(namespace="foo", expiration=3600)
    public Object findById(@ParameterValueKeyProvider int id) {
            return loadFromDatabase(id);
    }
}

このメソッドが呼び出されると、このメソッドインターセプターの本体を呼び出す前に、キーの下のキャッシュに値があるかどうかを確認します(キーは名前空間とidパラメーターを使用して作成されます)。キャッシュに値がある場合、その値は呼び出し元に返され、メソッドの本体(loadFromDatabase)は実行されません。キャッシュに値がない場合、メソッドの本体が実行され、結果がキャッシュに保存されて呼び出し元に返されます。

memcachedクライアントを直接使用する場合でも、SSMのCacheオブジェクトを使用できますが、xmemcachedの使用に関心がある場合があります。

于 2012-05-30T09:49:58.403 に答える