Spring缓存无法使用Memcached

时间:2016-11-15 19:32:47

标签: spring caching memcached spring-cache spymemcached

我正在尝试使用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时收到错误。但是缓存不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

已有可用的解决方案将memcached(spymemcached或xmemcached)与Spring Cache抽象集成在一起:Simple Spring Memcached。考虑使用它。