Una caché de filas
dentro de PostgreSQL.

Lee filas por clave primaria con RESP MGET autenticado. Las escrituras de PostgreSQL invalidan automáticamente las entradas de caché afectadas.

API RESP autenticada · PostgreSQL 14–18 · Código abierto

La versión 3.1.0 usa capacidad en bytes para millones de claves pequeñas si el presupuesto lo permite. Añade bloqueos particionados, aciertos de una clave sin asignaciones, seguimiento de escrituras más barato y fallos aplazados por bloqueos de relación. Guía de actualización.

3.1.0 · compilación final c431bcc

210ksolicitudes/s · RESP MGET

Por núcleo físico del servidor fijado
claves calientes · 256 clientes · Go/pgx

Valkey · io-threads=2N
91.5k solicitudes/s
SQL preparado
23.2k solicitudes/s
VM en red privada de 10 GbE · Xeon Gold 6354 · fijado a un núcleo físico.
Con un núcleo, Valkey io-threads=1 alcanzó 180k solicitudes/s y usó menos CPU de servidor por solicitud.
Resultados, datos brutos y condiciones

Una llamada. Dos recorridos de lectura.

Un acierto elegible devuelve la fila almacenada. Un fallo o una omisión lee la tabla de origen. Tus consultas SELECT habituales conservan su recorrido existente.

RESP2 │ lecturas por clave primaria
-- Attach your table once.
SELECT local_cache.attach_table('public.items');

-- Read rows by primary key.
MGET CRUD:pglc_demo.public.items:{"id":42} CRUD:pglc_demo.public.items:{"id":7}
El recorrido de lectura RESP MGET La aplicación envía RESP MGET autenticado. Un acierto de caché elegible devuelve la fila completa almacenada. Un fallo o una omisión lee la tabla de origen con el rol de trabajador configurado y devuelve la fila por RESP. PostgreSQL Aplicación RESP MGET Elegibilidad + snapshot Acierto Fallo / omisión Almacenadafila Origentabla
Ambos recorridos devuelven filas completas por RESP. Una lectura de la tabla de origen puede llenar la caché.
Qué evita un acierto de la caché de filas
RESP MGET

Autenticado y limitado a 1.024 claves por solicitud. Las filas ausentes devuelven null.

Escrituras habituales

INSERT, UPDATE y DELETE invalidan las entradas afectadas.

Capacidad fija

Asigna la caché de filas compartida al iniciar PostgreSQL.

Validación de generación del fence y de la carga útil

Las lecturas no elegibles usan la tabla de origen conforme a las reglas de visibilidad de PostgreSQL.

Ejecuta la misma prueba.
En cada cliente.

Node.js y Go. SQL preparado y RESP MGET.

Un mismo ejecutor usa las mismas claves, tamaños de lote, cantidades de conexiones, duración y comprobaciones de resultados. Compara rendimiento, latencia y CPU y memoria de PostgreSQL en tu máquina.

Ejecutar la comparación

¿Es esta tu carga de trabajo?

¿Estás eligiendo una caché? Compara páginas de PostgreSQL, filas, vistas materializadas y Redis.

Vale la pena medir

  • Consultas repetidas de filas completas por clave primaria.
  • Un conjunto pequeño y activo de filas completas.
  • READ COMMITTED en una primaria escribible.
  • Una aplicación que pueda usar RESP MGET autenticado.

Conserva el SQL habitual

  • Uniones, rangos, agregados o resultados de consultas arbitrarias.
  • Tablas con RLS, particionadas o heredadas.
  • Una base de datos donde no puedas instalar una extensión nativa.
  • Cargas de trabajo sin un beneficio medido.

Ejecuta una demo local.

Clona el repositorio e inicia un servidor PostgreSQL desechable con filas de ejemplo. Docker compila la extensión y mantiene la demo separada de tus bases de datos.

Se requieren Git y Docker Compose
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

Lee filas de ejemplo y comprueba los aciertos de caché. ¿Ya has clonado el repositorio? Ejecuta el último comando desde su raíz. Para un servidor existente, usa la guía de instalación.

La instalación en un servidor existente requiere reiniciar PostgreSQL.

Documentación

Prueba pg_local_cache localmenteEjecuta pg_local_cache 3.1.0 en PostgreSQL desechable, lee filas de ejemplo por RESP, revisa aciertos de caché, prueba actualizaciones y elimina la demo sin modificar una base existente. Instala pg_local_cache en PostgreSQL 14–18Instala un paquete Debian o RPM verificado, usa PGXN o PGXS, configura preload, reinicia PostgreSQL e inicializa, actualiza o desinstala pg_local_cache. Clientes RESPConecte clientes compatibles con Redis a pg_local_cache mediante RESP2, MGET, autenticación por token y TLS nativo. Benchmarks de caché PostgreSQL, 3.1.0Resultados de pg_local_cache 3.1.0 en dos máquinas: lecturas fijadas y completas, escrituras, lecturas durante escrituras y metodología. Referencia técnica de pg_local_cacheReferencia sobre lecturas RESP, tablas admitidas, barreras transaccionales, TLS, memoria compartida, métricas y ajustes de PostgreSQL. Actualizar pg_local_cache a 3.1.0Actualice pg_local_cache desde 3.0.0 o 2.x, revise los ajustes de capacidad y workers de 3.1 y compruebe la extensión tras reiniciar. Guía para decidir el almacenamiento en caché de PostgreSQLCompare la caché de páginas de PostgreSQL, SQL preparado, caché de filas completas, vistas materializadas y Redis según el trabajo que evita cada ruta de lectura. Consultas por lotes de claves primarias de PostgreSQLAprende a evitar lecturas N+1 por clave primaria y a leer filas completas por lotes con RESP MGET autenticado. PostgreSQL y Redis cache-asideCompare Redis cache-aside gestionado por la aplicación con las lecturas RESP de pg_local_cache, incluidas las carreras por cargas obsoletas y la invalidación de escrituras. Caché de filas de PostgreSQL frente a shared_buffersCompare la caché de páginas de PostgreSQL con la caché de filas completas de pg_local_cache: trabajo de origen evitado, costes de caché y cargas de trabajo que deberían seguir usando SQL ordinario. Invalidación de caché consciente de las transacciones en PostgreSQLCómo los triggers de PostgreSQL protegen las lecturas de filas RESP frente a commits, rollbacks y cargas de caché simultáneas.

Notas prácticas sobre la caché de PostgreSQL

Todos los artículos →

Antes de probarlo

¿Esto reemplaza shared_buffers?

No. PostgreSQL almacena en caché las páginas de la base de datos. Esta extensión almacena por separado filas completas serializadas por clave primaria. Consulta la comparación de recorridos de lectura.

¿Almacena en caché las consultas SELECT habituales?

No. Solo RESP MGET autenticado usa la caché de filas compartida. Las consultas existentes mantienen el recorrido normal de PostgreSQL.

¿Reemplaza a Redis?

No. El endpoint RESP2 es limitado. No ofrece un conjunto general de comandos de Redis, TTL, pub/sub ni coordinación distribuida. Compara los recorridos de caché aparte de PostgreSQL y Redis.

¿Cómo compruebo las actualizaciones y el rollback?

La guía de invalidación explica el comportamiento de las escrituras. La guía de actualización cubre el paso de 3.0.0 a 3.1.0 y la migración anterior desde 2.x.