2016-11-15 113 views
0

我想让我的Web应用程序使用REST API功能运行并使用Memcached进行缓存。春季缓存不与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如下 -

@GetMapping("/courses") 
@Cacheable("coursesCache") 
public List<Course> getCourses() { 
    return courseDAO.getAllCourses(); 
} 

我确信Memcached客户端正在创建得很好。否则,我在创建根上下文bean时遇到错误。但是,然后缓存不起作用。任何帮助将不胜感激。

回答

0

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