#spring #spring-boot #redis #spring-data-redis
#весна #spring-boot #redis #spring-data-redis
Вопрос:
Когда redis используется в качестве технологии кэширования с помощью spring boot ( <artifactId>spring-boot-starter-data-redis</artifactId>
), я вижу, что в файле можно установить несколько свойств, таких как TTL application.properties
. пример:
spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=600000
и еще несколько фрагментов из — Приложения A. Общие свойства приложения
spring.redis.database=0 # Database index used by the connection factory.
spring.redis.url= # Connection URL. Overrides host, port, and password. User is ignored. Example: redis://user:password@example.com:6379
spring.redis.host=localhost # Redis server host.
Но я не могу понять, как установить политику удаления кэша, например — Наименее часто используемый или последний раз используемый и т. Д.
Как и где я должен предоставить эту информацию о конфигурации??
Комментарии:
1. вы уже выяснили ответ? : D Мне тоже нужна эта информация, лол
2. @solujic, загляните в redis.conf. Вероятно, нет способа установить его из кода Java.
3. Это возможно, см. Мой ответ.
Ответ №1:
В документации Redis cache указано:
Директиву конфигурации можно установить с помощью файла redis.conf или позже с помощью команды CONFIG SET во время выполнения.
В документации по конфигурации Redis указано:
maxmemory 2mb
maxmemory-policy allkeys-lru
Объединяя их, команда для изменения политики выселения:
CONFIG SET maxmemory-policy allkeys-lfu
Использование Spring Data Redis:
При использовании нереактивного соединения Redis:
RedisConnection conn = null;
try {
conn = connectionFactory.getConnection();
conn.setConfig("maxmemory-policy", "allkeys-lfu");
} finally {
if (conn != null) {
conn.close();
}
}
При использовании реактивного соединения Redis:
ReactiveRedisConnection conn = connectionFactory.getReactiveConnection();
conn
.serverCommands()
.setConfig("maxmemory-policy", "allkeys-lfu")
.filter(status -> status.equals("OK"))
.doFinally(unused -> conn.close())
.block(Duration.ofSeconds(5L));