#java #spring #redis
#java #весна #redis
Вопрос:
Redis может использоваться в качестве механизма хранения кэша в приложениях Spring (boot). Однако это позволяет установить только общее ограничение размера maxmemory. Есть ли способ ограничить отдельные повторные кеши по их размеру либо по количеству элементов, либо по количеству байтов, хранящихся в этом (под-) кеше?
Существует ли какая-либо библиотека-оболочка, которая предоставляет такую функциональность? Или, возможно, есть интерфейс, который можно было бы реализовать, чтобы легко достичь чего-то подобного?
Ответ №1:
Вы должны написать свой собственный redis jar, сохраняя эти ограничения, и предоставить интерфейс для вашего основного проекта. Это даст вам гораздо больше гибкости
Ответ №2:
Да, вы можете достичь того же. Я бы посоветовал вам использовать клиент Redisson для этой цели.
@Configuration
@EnableCaching
public static class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson() throws IOException {
Config config = new Config();
config.useClusterServers()
.addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");
return Redisson.create(config);
}
@Bean
public CacheManager cacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
// create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutes
CacheConfig cacheConfig = new CacheConfig(24*60*1000, 12*60*1000);
// 100 entries
cacheConfig.setMaxSize(100);
config.put("testMap", cacheConfig);
return new RedissonSpringCacheManager(redissonClient, config);
}
}
Комментарии:
1. могу ли я иметь несколько настроек кэша?? как использовать
2. У вас может быть CacheConfig для каждого кэша. Просто создайте новый объект CacheConfig с нужным TTL и maxIdleTime (и задайте для него любую другую конфигурацию) и добавьте его в карту, переданную конструктору RedissonSpringCacheManager. Установите ключ в map на имя кэша.