Переопределение аннотации @cacheable, потому что утечки памяти реализации Redis - PullRequest
0 голосов
/ 04 декабря 2018

Итак, я использую клиент Jedis для подключения к серверу redis в моем java-приложении с очень высоким трафиком в производственной среде.

Проблема в том, что реализация redis в Springboot не очень подходит для redis и в моемМнение о том, как Redis работает для реализации интерфейса, вызывает утечку памяти в моем приложении.

Например, я использую общий способ Springboot для кэширования вывода SQL-запросов таким способом с аннотацией @Cacheable.

  @Cacheable("Catalog")
  @Override
  public Map<Integer, String> getAllTermsOfUse() {
    final MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("language_code", this.userContext.getLocale());

    return this
        .getNamedParameterJdbcTemplate()
        .query(SELECT_ALL_TERMS, parameters, this.termsOfUseResultSetExtractor);
  }

Чтобы иметь разные кеши (в данном случае кеш каталога), redis создает zset со значением имени, в данном случае ключи ~ каталога и вставляет в каждый ключ zset, чтобы сохранить отображениекаждого ключа в каталоге.

У меня проблема в том, что у нас есть бесконечное количество ключей, которые создаются с помощью uuids, а defaultExpiration установлено в 2 минуты.Никогда не наступает время суток, когда истекает срок действия ключей каталога ~, потому что никогда не бывает промежутка времени в 2 минуты, когда ключ не установлен.Это вызывает очевидную утечку памяти.

Вот мои возможные решения:

  1. Не используется @Cacheable.Для меня это означало бы большую разработку. Мне нужно было бы внедрять новые аннотации, реорганизовывать каждый репозиторий.
  2. Установить срок действия для этой zsets равным 1 секунде.Вероятно, есть время, равное 1 секунде, когда они истекают
  3. Переопределение @Cacheable с моей собственной реализацией (я не знаю, как переопределить аннотацию, которую я искал для информации об этом ...
  4. Выясните, как не использовать имена кэша, как Springboot использует их с Redis.

Любые предложения приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...