Код: Выделить всё
public class RedissonConfigurationFactory extends RedissonRegionFactory{
private static RedissonClient redisson;
@SuppressWarnings({"rawtypes", "unchecked"})
@OverRide
protected RedissonClient createRedissonClient(Map properties) {
if (redisson == null) {
Config config = new Config();
String redisHost = System.getenv().getOrDefault("REDIS_HOST", "localhost");
String redisPort = System.getenv().getOrDefault("REDIS_PORT", "6379");
String redisPassword = System.getenv("REDIS_PASSWORD");
config.setCodec(new SerializationCodec());
config.useSingleServer()
.setAddress("redis://" + redisHost + ":" + redisPort)
.setPassword(redisPassword)
.setDatabase(0)
.setConnectionPoolSize(64)
.setTimeout(3000)
.setRetryAttempts(3)
.setRetryInterval(1500);
redisson = Redisson.create(config);
}
return redisson;
}
}
Код: Выделить всё
RedissonConfigurationFactory
2
5000
LRU
Код: Выделить всё
@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE, region = "my_region")
public class EntityClass{}
Я также проверил это с помощью графического интерфейса RedisInsights, там также для соответствующего ключа «Hash» TTL установлено значение «Без ограничений».
При проверке журналов Redisson MapCacheEvictionTask я также получаю оператор ниже журнала. для региона даже после того, как прошло время time_to_live:
"loggerName":"org.redisson.eviction.MapCacheEvictionTask", "message":"0 элементов выселено. Имя объекта: EntityClass"
По сути, когда TTL прошел, должен был быть сделан вызов БД, который не отображается в журналах и каждый раз, когда он выбирается из самого кеша. Невыселение может привести к бесконечному увеличению памяти сервера Redis, пока она не будет удалена или освобождена вручную.
Почему это свойство TTL может не применяться при Redisson?
Подробнее здесь: https://stackoverflow.com/questions/797 ... icting-the
Мобильная версия