我一直在努力了解memcached的使用情况等,并尝试从昨天开始通过阅读少量稀缺资源进行设置。让我首先展示我拥有的东西。
按照here说明配置了弹簧:
<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>
通过spring成功创建了与服务器的连接:
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
我认为defaultMemcachedClient
bean应该是我的memcached客户端。这显然不是。我该怎么办?有人有想法吗?链接?建议吗?什么?
答案 0 :(得分:2)
defaultMemcachedClient bean的类型为Cache,与xmemecached无关。
如果您想直接使用memcached,请不要使用Simple Spring Memcached。 SSM用于使用拦截器(AOP)和注释进行缓存。在你的情况下:
public class Foo {
// cache for 1 hour
@ReadThroughSingleCache(namespace="foo", expiration=3600)
public Object findById(@ParameterValueKeyProvider int id) {
return loadFromDatabase(id);
}
}
调用此方法时,在调用此方法的主体之前,拦截检查密钥下的缓存中是否有任何值(密钥是使用namespace和id参数创建的)。如果缓存中有值,则返回给调用者,并且不执行方法体(loadFromDatabase)。如果执行方法的高速缓存主体没有值,则结果存储在高速缓存中并返回给调用者。
如果您想直接使用memcached客户端,您仍然可以使用SSM中的Cache对象,但您可能对使用xmemcached感兴趣。