Skip to content

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

Эндпоинты для управления кэшем Redis: статистика, инвалидация, прогрев, конфигурация.

GET /cache/statistics

Статистика кэша: количество записей, попадания, промахи, размер.

Успешный ответ (200)

json
{
  "success": true,
  "data": {
    "total_entries": 2847,
    "active_entries": 2541,
    "expired_entries": 306,
    "hits": 84732,
    "misses": 3210,
    "hit_ratio": 96.35,
    "memory_usage_bytes": 4194304,
    "memory_usage_human": "4 MB",
    "uptime_seconds": 86400,
    "oldest_entry_age": "2h15m",
    "average_ttl_remaining": "3m42s",
    "last_cleanup": "2026-06-11T12:55:00Z"
  }
}

GET /cache/config

Текущая конфигурация кэша.

Успешный ответ (200)

json
{
  "success": true,
  "data": {
    "enabled": true,
    "default_ttl": 300,
    "max_entries": 10000,
    "compression_enabled": true,
    "compression_threshold": 1024,
    "cleanup_interval": 60,
    "memory_cache_enabled": true,
    "redis_available": true
  }
}

PUT /cache/config

Обновление конфигурации кэша. Все поля опциональны.

Тело запроса

json
{
  "default_ttl": 600,
  "max_entries": 20000,
  "enable_compression": true,
  "compression_threshold": 2048,
  "cleanup_interval": 120,
  "enable_memory_cache": false
}

Успешный ответ (200)

json
{
  "success": true,
  "message": "Конфигурация кэша обновлена"
}

POST /cache/invalidate

Инвалидация записей кэша. Поддерживает несколько режимов.

Типы инвалидации

ТипПараметрыОписание
keykeyИнвалидация конкретного ключа
sloslo_idИнвалидация всех записей по SLO
patternpatternИнвалидация по glob-паттерну
expiredОчистка истёкших записей
allПолная очистка кэша

Тело запроса

json
{
  "type": "pattern",
  "pattern": "slo:*:metrics",
  "key": "",
  "slo_id": 0
}

Успешный ответ (200)

json
{
  "success": true,
  "message": "Кэш инвалидирован",
  "data": {
    "type": "pattern",
    "invalidations": 42,
    "timestamp": "2026-06-11T13:00:00Z"
  }
}

POST /cache/warmup

Прогревание кэша — предварительная загрузка результатов Prometheus-запросов.

Тело запроса

json
{
  "queries": [
    {
      "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
      "slo_id": 1,
      "time_window": "1h",
      "ttl": 600000000000
    }
  ]
}

Поле ttl указывается в наносекундах (600000000000 = 10 минут). Если не указано, используется значение из конфигурации (5 минут).

Успешный ответ (200)

json
{
  "success": true,
  "message": "Кэш прогрет",
  "data": {
    "queries_warmed": 1,
    "timestamp": "2026-06-11T13:00:00Z"
  }
}

GET /cache/entries

Список записей кэша с фильтрацией и пагинацией.

Параметры запроса

ПараметрТипПо умолчаниюОписание
pageint1Номер страницы
page_sizeint20Количество на странице (макс. 100)
slo_idintФильтр по SLO
freshboolТолько свежие записи

Успешный ответ (200)

json
{
  "success": true,
  "data": {
    "entries": [
      {
        "key": "slo:1:metrics:1h",
        "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m]))",
        "slo_id": 1,
        "time_window": "1h",
        "created_at": "2026-06-11T12:00:00Z",
        "expires_at": "2026-06-11T12:05:00Z",
        "is_fresh": true,
        "size_bytes": 256
      }
    ],
    "total": 2541,
    "page": 1,
    "page_size": 20,
    "has_next": true
  }
}

GET /cache/entry/:key

Получение конкретной записи по ключу.

Успешный ответ (200)

json
{
  "success": true,
  "data": {
    "key": "slo:1:metrics:1h",
    "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m]))",
    "slo_id": 1,
    "time_window": "1h",
    "result": { "value": 99.943 },
    "created_at": "2026-06-11T12:00:00Z",
    "expires_at": "2026-06-11T12:05:00Z"
  }
}

Ошибки

КодПричина
404Ключ не найден
400Ключ не указан

POST /cache/entry

Ручное создание записи в кэше.

Тело запроса

json
{
  "key": "slo:1:metrics:7d",
  "query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
  "slo_id": 1,
  "time_window": "7d",
  "result": { "value": 99.89 },
  "ttl": 3600000000000
}

DELETE /cache/entry/:key

Удаление записи из кэша по ключу.

Успешный ответ (200)

json
{
  "success": true,
  "message": "Запись кэша удалена"
}

Сводная таблица

МетодПутьОписание
GET/cache/statisticsСтатистика кэша
GET/cache/configКонфигурация кэша
PUT/cache/configОбновление конфигурации
POST/cache/invalidateИнвалидация записей
POST/cache/warmupПрогревание кэша
GET/cache/entriesСписок записей с пагинацией
GET/cache/entry/:keyПолучение записи по ключу
POST/cache/entryСоздание записи
DELETE/cache/entry/:keyУдаление записи