Перейти к основному содержимому

Как это работает

Добавлено в 1.0.1 Изменено в 1.1.4

Runtime-код читает значения только через get_value(). ORM-чтение одного ключа, свои cache-aside ключи и доменные fallback в пакет не входят.

Контракт чтения​

  1. Прочитать global-config:{key} из Django cache.
  2. Принять только GlobalConfigCacheValueDTO. Старые нетипизированные записи — miss.
  3. При miss ждать global-config:refresh-lock.
  4. После захвата lock повторно проверить запрошенный ключ.
  5. Если другой процесс не опубликовал снимок, прочитать все строки GlobalConfig.
  6. Остановиться, если отсутствует любой объявленный ключ.
  7. Разобрать весь снимок. Ошибка одного значения отменяет публикацию.
  8. Опубликовать значения и маркер готовности через set_many, пока lock принадлежит процессу.
  9. Вернуть запрошенный ключ. SECURE расшифровывается только в памяти.

В get_value() нет fallback к чтению одной строки из БД. У ключей нет TTL. После commit сохранённый ключ обновляется точечно; полный refresh отвечает за восстановление после cache miss и периодическую сверку.

Когда обновляется снимок​

  • синхронный cache miss
  • точечный refresh сохранённого ключа после post_save через transaction.on_commit()
  • post_migrate после инициализации
  • необязательная Celery-задача django_gc.refresh_global_configs_cache

Инициализация подавляет per-row refresh и планирует один полный refresh после commit.

Строки хранятся в явных таблицах global_configs и global_config_categories. Таблица категорий содержит только числовые идентификаторы, а подписи для Admin берутся из project definitions.