Настройка Redis и кэширования

Реализация OSA Proxy

Эта страница относится к текущей реализации OSA Proxy. Архивная Java/Spring-реализация доступна в разделе Архивная Java/Spring-реализация.

OSA Proxy поддерживает Redis-кэш вердиктов Judge, чтобы ускорять повторные запросы и снижать нагрузку на CodeScoring. Кэш выключен по умолчанию.

cache:
  judge:
    enabled: true
    ttl: 24h
    refresh-after: 30m
    proactive-refresh-enabled: false
    proactive-refresh-interval: 2h
    proactive-refresh-workers: 10
    key-prefix: "cs:judge:"
  redis:
    address: redis:6379
    username: ""
    password: ""
    db: 0

Параметры

ПараметрНазначение
cache.judge.enabledВключает Redis-кэш результатов проверки Judge.
cache.judge.ttlВремя жизни записи кэша. По умолчанию 24h.
cache.judge.refresh-afterВозраст записи, после которого ее можно обновлять в фоне. По умолчанию 30m.
cache.judge.proactive-refresh-enabledВключает периодическое фоновое обновление устаревающих записей. По умолчанию false.
cache.judge.proactive-refresh-intervalПериод фонового обновления. По умолчанию 2h.
cache.judge.proactive-refresh-workersКоличество workers для фонового обновления. По умолчанию 10.
cache.judge.key-prefixПрефикс Redis-ключей.
cache.redis.addressАдрес Redis в формате host:port.
cache.redis.usernameИмя пользователя Redis ACL.
cache.redis.passwordПароль Redis.
cache.redis.dbНомер базы Redis.

Redis Sentinel

Для Redis HA включите Sentinel. Обычный cache.redis.address в этом режиме не требуется. Учетные данные Redis master и Sentinel задаются независимо:

cache:
  judge:
    enabled: true
    ttl: 24h
    refresh-after: 30m
    key-prefix: "cs:judge:"
  redis:
    username: redis-user
    password: redis-password
    db: 0
    sentinel:
      enabled: true
      master-name: mymaster
      addresses:
        - sentinel-1:26379
        - sentinel-2:26379
        - sentinel-3:26379
      username: sentinel-user
      password: sentinel-password

При временной недоступности Redis OSA Proxy продолжает использовать предусмотренные локальные механизмы кэширования.

TTL и фоновое обновление

Фоновое обновление не продлевает TTL записи само по себе. TTL продлевается при чтении данных из кэша реальными запросами, поэтому редко используемые записи со временем удаляются из Redis.

Управление кэшем

Служебный API доступен через Swagger UI:

https://osa-proxy.example.com/api/swagger/

Основные операции:

  • DELETE /api/cache/purls — удалить конкретные PURL из кэша вердиктов;
  • DELETE /api/cache/packages/{packageType} — удалить записи по типу пакета, имени пакета или repository context.
Страница была полезна?