1

나는 memcached를 봄용 캐시 구현으로 통합하기 위해 https://github.com/AKQABER/simple-spring-memcached을 사용하고 있습니다.memcached를 사용한 스프링 캐시

그러나 I'had 성공하지 : P 내가 스프링 (4)와 스프링 데이터 JPA

public interface FooRepository extends JpaRepository<Foo, Long> { 

@Cacheable(value = "defaultCache", key = "lala") 
    Foo findByNameAndDescription(String name, String description); 
} 

을 사용하고

나는 테스트 용 키를 하드 코딩. 특별한 것은 없지만 "defaultCache"라는 캐시를 사용하십시오.

@Configuration 
@EnableAspectJAutoProxy 
public class CacheConfiguration 
{ 

@Bean 
public CacheManager cacheManager() 
{ 
    MemcacheClientFactoryImpl cacheClientFactory = new MemcacheClientFactoryImpl(); 
    AddressProvider addressProvider = new DefaultAddressProvider("127.0.0.1:11211"); 
    com.google.code.ssm.providers.CacheConfiguration cacheConfiguration = new com.google.code.ssm.providers.CacheConfiguration(); 
    cacheConfiguration.setConsistentHashing(true); //TODO check this 

    CacheFactory cacheFactory = new CacheFactory(); 
    cacheFactory.setCacheName   ("defaultCache"  ); 
    cacheFactory.setCacheClientFactory (cacheClientFactory ); 
    cacheFactory.setAddressProvider  (addressProvider  ); 
    cacheFactory.setConfiguration  (cacheConfiguration ); 

    Cache object = null; 
    try { 
     object = cacheFactory.getObject(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    SSMCache ssmCache = new SSMCache(object, 10000, true); //TODO be very carefully here, third param allow remove all entries!! 

    ArrayList<SSMCache> ssmCaches = new ArrayList<SSMCache>(); 
    ssmCaches.add(0, ssmCache); 

    SSMCacheManager ssmCacheManager = new SSMCacheManager(); 
    ssmCacheManager.setCaches(ssmCaches); 


    return ssmCacheManager; 
} 
} 

그리고 코드로 간단한 기본 클래스를 사용하여 테스트 할 수 있습니다 : memcached와의 구성은

CacheManager cacheManager = context.getBean(CacheManager.class); 
    FooRepository repository = context.getBean(FooRepository.class); 

    Cache defaultCache = cacheManager.getCache("defaultCache"); 
    defaultCache.clear(); 
    Foo byNameAndDescription = repository.findByNameAndDescription(DEFAULT_NAME, DEFAULT_DESCRIPTION); 
    Object obj = defaultCache.get("lala"); 

을 그리고 OBJ 항상 null입니다. 그러나 defaultCache 객체를 직접 사용하면 문제없이 캐시에 항목을 가져 오거나 가져올 수 있습니다. 어떤 생각?

+0

Key는 해결할 수없는 경우 SpEL을 사용하여 평가되는 표현식을 취합니다. 'null'이 키로 사용됩니다. 그래서 당신이 사용하기를 기대하는 열쇠가 아닌 것 같습니다. –

+0

고마워! 나는 이미 마지막 키 대신에 "lala"를 시도해 왔고, 여전히 null 값을 얻고 있습니다. – ilopezluna

답변

3

응용 프로그램에서 스프링 캐시를 활성화 했습니까? 그렇지 않다면 구성 빈에 @EnableCaching을 사용하십시오.

SSMCacheManager 대신 org.springframework.cache.support.SimpleCacheManager을 사용하는 경우 캐싱 작업을 확인하는 데 도움이되지 않으면 도움이되지 않습니다. 그렇지 않다면 Spring Cache 설정에 여전히 문제가 있습니다.

+0

감사합니다. @EnableCaching 주석을 잊어 버렸습니다. – ilopezluna

관련 문제