API SQL explicite · PostgreSQL 14–18 · Open source
Mesuré localement · 15 sept. 2026
839,678requêtes/s · RESP MGET
3.31× le débit SQL préparé dans cette comparaison à clé unique
SQL préparé
253,790 req/s
SQL mget
186,296 req/s
Apple M3 Max · PostgreSQL 16 · Go · 256 connexions. Cache chaud, 1 clé/requête. Médiane de 3 × 5 secondes. SQL mget était plus lent ici ; les résultats par lots diffèrent.Résultats, données brutes et conditions →
Un appel. Deux chemins de lecture.
Un hit éligible renvoie la ligne stockée. Un miss ou un contournement lit la table source. Vos requêtes SELECT ordinaires gardent leur chemin actuel.
psql │ lectures par clé primaire
-- 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[]
);
Les deux chemins renvoient des lignes complètes sérialisées via la même connexion PostgreSQL. Une lecture éligible de la table source peut remplir le cache.
Jusqu'à 1 024 clés par appel. L'ordre, les doublons et les positions NULL sont conservés.
Écritures ordinaires
INSERT, UPDATE et DELETE invalident les entrées concernées.
Capacité fixe
Allouez le cache de lignes partagé au démarrage de PostgreSQL.
Vérifications du snapshot
Les lectures non éligibles utilisent la table source selon les règles de visibilité de PostgreSQL.
Lancez le même test. Avec chaque client.
Node.js et Go. SQL préparé, SQL mget et RESP MGET.
Un seul exécuteur utilise les mêmes clés, tailles de lots, nombres de connexions, durée et vérifications des résultats. Comparez le débit, la latence, ainsi que le CPU et la mémoire PostgreSQL sur votre machine.
Lectures répétées de lignes complètes par clé primaire.
Un petit ensemble chaud de lignes complètes.
READ COMMITTED sur un primaire inscriptible.
Une application capable d'appeler l'API SQL explicite.
Gardez le SQL ordinaire
Jointures, plages, agrégats ou résultats de requêtes arbitraires.
Tables avec RLS, partitionnées ou héritées.
Une base de données où vous ne pouvez pas installer d'extension native.
Charges de travail sans bénéfice mesuré.
Lancez une démo locale.
Clonez le dépôt et démarrez un serveur PostgreSQL éphémère avec des lignes d'exemple. Docker compile l'extension et garde la démo séparée de vos bases de données.
Git et Docker Compose sont requis
git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml up --build --wait
Parcourez une course cache-aside où une ancienne lecture remplit une clé supprimée après le commit. Comprenez la validation des remplissages, les snapshots, le rollback et les caches locaux aux requêtes.
Concevez une comparaison équitable d'un cache de lignes PostgreSQL avec SQL préparé, SQL mget et RESP MGET. Séparez lectures chaudes, misses, tailles de lots, écritures et coûts clients.
Remplacez les requêtes de clés primaires N+1 en conservant les ID dupliqués, l'ordre d'entrée, les positions NULL et les lignes absentes. Comparez ANY, WITH ORDINALITY et SQL mget.
Non. PostgreSQL met en cache les pages de la base de données. Cette extension met séparément en cache des lignes complètes sérialisées par clé primaire. Consultez la comparaison des chemins de lecture.
Met-il en cache les requêtes SELECT ordinaires ?
Non. Seuls les appels explicites à local_cache.mget utilisent le cache SQL. Vos requêtes existantes gardent le chemin d'exécution PostgreSQL normal.
Remplace-t-il Redis ?
Non. Le point de terminaison RESP2 optionnel est limité. Il n'y a ni ensemble général de commandes Redis, ni TTL, ni pub/sub, ni coordination distribuée. Comparez les chemins cache-aside PostgreSQL et Redis.
Comment vérifier les mises à jour et le rollback ?
Le guide d'invalidation contient un test à deux sessions. L'exemple exécutable vérifie les écritures non validées, la lecture de ses propres écritures, le rollback et les mises à jour validées.