Инвалидация кэша PostgreSQL: гонка позднего заполнения
Разберите гонку cache-aside, когда старое чтение повторно заполняет удалённый ключ после коммита. Узнайте об ограждении публикации, снимках, откате и кэшах на уровне запроса.
Читать статьюЧитайте строки по первичному ключу через SQL mget или RESP. Записи PostgreSQL автоматически инвалидируют затронутые записи кэша.
Явный SQL API · PostgreSQL 14–18 · Открытый исходный код
Измерено локально · 15 сентября 2026
839,678запросов/с · RESP MGET
3.31× пропускной способности подготовленного SQL
в этом сравнении одного ключа
Подходящее попадание возвращает сохранённую строку. Промах или обход кэша читает исходную таблицу. Ваши обычные запросы SELECT сохраняют существующий путь.
-- Attach your table once.
SELECT local_cache.attach_table('public.items');
-- Read rows by primary key.
SELECT local_cache.mget(
'public.items', ARRAY[42, 7]::bigint[]
);
До 1 024 ключей за вызов. Порядок, дубликаты и позиции NULL сохраняются.
INSERT, UPDATE и DELETE инвалидируют затронутые записи.
Выделяйте кэш строк в общей памяти при запуске PostgreSQL.
Недопустимые чтения используют исходную таблицу с учётом правил видимости PostgreSQL.
Node.js и Go. Подготовленный SQL, SQL mget и RESP MGET.
Один запуск использует одинаковые ключи, размеры пакетов, число соединений, длительность и проверки результатов. Сравнивайте пропускную способность, задержку, а также CPU и память PostgreSQL на своей машине.
Запустить сравнениеВыбираете кэш? Сравните страницы PostgreSQL, строки, материализованные представления и Redis.
Клонируйте репозиторий и запустите временный сервер PostgreSQL с демонстрационными строками. Docker соберёт расширение и отделит демонстрацию от ваших баз данных.
git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml up --build --wait
Прочитайте демонстрационные строки и проверьте попадания в кэш. Уже клонировали репозиторий? Запустите последнюю команду из его корня. Для существующего сервера используйте руководство по установке.
Установка на существующий сервер требует перезапуска PostgreSQL.
Разберите гонку cache-aside, когда старое чтение повторно заполняет удалённый ключ после коммита. Узнайте об ограждении публикации, снимках, откате и кэшах на уровне запроса.
Читать статьюСпроектируйте честное сравнение кэша строк PostgreSQL с подготовленным SQL, SQL mget и RESP MGET. Разделите прогретые чтения, промахи, размеры пакетов, записи и затраты клиента.
Читать статьюЗамените запросы по одному первичному ключу, сохранив дублирующиеся ID, порядок входных данных, позиции NULL и отсутствующие строки. Сравните ANY, WITH ORDINALITY и SQL mget.
Читать статьюНет. PostgreSQL кэширует страницы базы данных. Это расширение отдельно кэширует сериализованные целые строки по первичному ключу. См. сравнение путей чтения.
Нет. Кэш SQL используют только явные вызовы local_cache.mget. Ваши существующие запросы сохраняют обычный путь выполнения PostgreSQL.
Нет. Необязательная конечная точка RESP2 ограничена. Здесь нет универсального набора команд Redis, TTL, pub/sub или распределённой координации. Сравните пути cache-aside для PostgreSQL и Redis.
В руководстве по инвалидации есть тест в двух сеансах. Выполняемый пример проверяет незакоммиченные записи, чтение собственных изменений, откат и зафиксированные обновления.