2016-11-15 9 views
0

REST API 기능을 사용하여 웹 응용 프로그램을 실행하고 Memcached를 사용하여 캐싱하려고합니다.Spring 캐싱이 Memcached와 작동하지 않습니다.

응용 프로그램을 배포하는 동안 Spring에서 오류가 발생하지 않습니다. 그러나 캐싱이 작동하지 않습니다. Spring 캐싱과 함께 spymemcached Java 클라이언트를 사용했습니다. 누군가 내가 잘못 가고 있다고 말할 수 있습니까? 이

<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> 

이 내가 follows-

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

나의 RestController의 캐시 가능 주석을 사용했다

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; 
} 
} 

캐시 인터페이스의 내 구현 내 루트 컨텍스트의 조각입니다 Memcached 클라이언트가 제대로 작성되었다고 확신합니다. 그렇지 않으면 루트 컨텍스트 bean을 만들 때 오류가 발생했습니다. 그러나 캐싱이 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

이미 memcached (spymemcached 또는 xmemcached)와 스프링 캐시 추상화를 통합하는 솔루션은 Simple Spring Memcached입니다. 그것을 사용하는 것을 고려하십시오.