1

Я использую https://github.com/AKQABER/simple-spring-memcached, чтобы интегрировать 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». Конфигурация Memcached является:

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

И я могу проверить это с помощью простого основного класса с кодом:

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 всегда нуль. Однако, если я использую объект defaultCache напрямую, я могу без проблем загружать и получать элементы из кеша. Есть идеи?

+0

Ключ принимает выражение, которое оценивается с использованием SpEL, если оно не может быть разрешено. 'Null' будет использоваться в качестве ключа. Поэтому я предполагаю, что ключ, который вы ожидаете использовать, - нет. –

+0

Спасибо! Я уже пробовал «lala» вместо последнего ключа, и я все еще получаю null в качестве значения. – ilopezluna

ответ

3

Включили ли вы кэш-память Spring в своем приложении? Если нет, то используйте конфигурацию компонента @EnableCaching.

Если это не помогает проверить, работает ли кеширование, если вы используете org.springframework.cache.support.SimpleCacheManager вместо SSMCacheManager. Если нет, то проблема с настройкой Spring Cache еще не решена.

+0

Спасибо! Я забыл аннотацию @EnableCaching – ilopezluna