Я использую 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 напрямую, я могу без проблем загружать и получать элементы из кеша. Есть идеи?
Ключ принимает выражение, которое оценивается с использованием SpEL, если оно не может быть разрешено. 'Null' будет использоваться в качестве ключа. Поэтому я предполагаю, что ключ, который вы ожидаете использовать, - нет. –
Спасибо! Я уже пробовал «lala» вместо последнего ключа, и я все еще получаю null в качестве значения. – ilopezluna