Запустите pg_local_cache локально

Эта демонстрация собирает pg_local_cache из текущего checkout в отдельном сервере PostgreSQL 16. Расширение не устанавливается в существующий сервер. Пример чтения использует listener RESP, настроенный слоем Compose.

Вам нужны Git, Docker и Docker Compose с поддержкой up --wait. Образ собирается из исходного кода.

Запустите базу данных

git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml -f examples/compose.resp.yaml up --build --wait

Демонстрация привязывает PostgreSQL и RESP к loopback-портам 55432 и 56379, не использует постоянный том и хранит данные во временной файловой системе контейнера. Интерфейс RESP принимает соединения внутри сети контейнера и явно включает plaintext-режим для демонстрации. При остановке контейнера данные удаляются. demo-only и открытый RESP-токен предназначены только для этой loopback-демонстрации; в production используйте собственные учётные данные.

Если порт 55432 занят, задайте PGLC_DEMO_PORT перед запуском Compose и сохраняйте это значение при запуске примера Node.js:

export PGLC_DEMO_PORT=55433

Чтение через RESP

Настройка создаёт 4 096 строк в public.items. К кэшу подключена только эта таблица. Роль demo не является суперпользователем.

export REDISCLI_AUTH=DemoRespToken_0123456789abcdef0123456789
redis-cli -2 -p 56379 MGET \
  'CRUD:pglc_demo.public.items:{"id":42}' \
  'CRUD:pglc_demo.public.items:{"id":7}' \
  'CRUD:pglc_demo.public.items:{"id":42}' \
  'CRUD:pglc_demo.public.items:{"id":999999}'

Ответ сохраняет порядок ключей и дубликаты. Первая и третья позиции относятся к строке 42; последняя позиция — RESP null, поскольку ключа 999999 нет. RESP-запрос не передаёт входные ключи со значением null; клиентские помощники могут восстановить эти позиции при необходимости.

Проверьте счётчики от имени администратора базы данных:

docker compose -f examples/compose.yaml exec -T postgres \
  psql -X -v ON_ERROR_STOP=1 -U postgres -d pglc_demo \
  -c 'SELECT local_cache.health();' \
  -c 'SELECT local_cache.stats();'

В этой свежей демонстрации local_cache.health() должен сообщить ready: true, а повторные чтения должны увеличить cache_hits. При необходимости проверьте cache_misses, database_reads и cache_enabled в local_cache.stats() и local_cache.health().

Проверка COMMIT и ROLLBACK

С Node.js 20 или новее:

npm --prefix examples/node-postgres ci --ignore-scripts
npm --prefix examples/node-postgres run demo

Тест использует RESP для чтения и PostgreSQL для записи. Он проверяет прогретое попадание, порядок входных данных, дубликаты и отсутствующие ключи, инвалидацию кэша и видимость подтверждённых обновлений. RESP-воркеры используют настроенную роль PostgreSQL и не разделяют SQL-транзакцию или снимок приложения.

См. руководство по инвалидации кэша или объяснение запросов Node.js.

Подключите приложение

Далее сравните одинаковую нагрузку подготовленного SQL и RESP. Для сообщения о результатах или проблемах настройки создайте отчёт о нагрузке, приложив окружение, JSON бенчмарка или журнал ошибок.

Удалите демонстрацию

docker compose -f examples/compose.yaml -f examples/compose.resp.yaml down

Локально собранный образ Docker останется доступен для следующего запуска. Службу PostgreSQL на хосте не нужно перезапускать или восстанавливать.

Для существующей базы данных следуйте руководству по установке. В этом случае будут другими права доступа, конфигурация и требования к перезапуску.

Обновлено .