我正在尝试使用REST API功能运行我的Web应用程序,并使用Memcached进行缓存。
在部署应用程序时,Spring不会抛出错误。但是缓存不起作用。我使用spymemcached Java客户端和Spring缓存。 有人可以告诉我哪里出错了吗? 这是我的根上下文的片段
<cache:annotation-driven />
<bean class="net.spy.memcached.MemcachedClient">
<constructor-arg ref="serverList" type="java.util.List" />
</bean>
<context:component-scan base-package="com.restdemo.cache" />
<util:list id="serverList" value-type="java.net.InetSocketAddress">
<bean class="java.net.InetSocketAddress">
<constructor-arg value="127.0.0.1" type="java.lang.String" />
<constructor-arg value="11211" type="int" />
</bean>
</util:list>
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean name="coursesCache" class="com.restdemo.cache.Memcache">
</bean>
</set>
</property>
</bean>
这是我对Cache接口的实现
public class Memcache implements Cache {
@Autowired
MemcachedClient cache;
private final String name = "";
public void clear() {
cache.flush();
}
public void evict(Object key) {
this.cache.delete(key.toString());
}
public ValueWrapper get(Object key) {
Object value = null;
try {
value = cache.get(key.toString());
} catch (final Exception e) {
e.printStackTrace();
}
if (value == null) {
return null;
}
return new SimpleValueWrapper(value);
}
public <T> T get(Object arg0, Class<T> arg1) {
// TODO Auto-generated method stub
return null;
}
public <T> T get(Object arg0, Callable<T> arg1) {
// TODO Auto-generated method stub
return null;
}
public String getName() {
return name;
}
public Object getNativeCache() {
return cache;
}
public void put(Object key, Object value) {
cache.set(key.toString(), 7 * 24 * 3600, value);
}
public ValueWrapper putIfAbsent(Object arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
我在RestController中使用了Cacheable注释,如下所示 -
@GetMapping("/courses")
@Cacheable("coursesCache")
public List<Course> getCourses() {
return courseDAO.getAllCourses();
}
我确信Memcached客户端创建得很好。否则,我在创建根上下文bean时收到错误。但是缓存不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
已有可用的解决方案将memcached(spymemcached或xmemcached)与Spring Cache抽象集成在一起:Simple Spring Memcached。考虑使用它。