PostgreSQL 缓存方案决策指南

本指南比较 PostgreSQL 页面缓存、预备 SQL、整行缓存、物化视图和 Redis,说明每种方案能够省去哪些工作。

从重复的工作入手

需求 方案 省去的工作
将表页和索引页保留在内存中 PostgreSQL shared_buffers 和操作系统缓存 磁盘读取;SQL 仍会执行
在同一会话中重复执行一条语句 预备语句 重复解析和分析
按主键读取完整行 通过身份验证的 RESP MGET,使用 pg_local_cache 符合条件的整行源数据读取
复用连接查询或聚合结果 物化视图 更新前无需重新计算已存储的查询结果
在多个服务间共享对象 Redis cache-aside 由应用管理的源数据读取

页面缓存与预备 SQL

shared_buffers 缓存的是数据库页面,而不是最终的 SELECT 结果。PostgreSQL 仍会检查可见性、执行查询并构建每个结果。预备语句 可以减少重复解析,但仍需基于数据库当前状态执行。

请参阅行缓存与 shared_buffers 对比,了解每条路径仍需执行哪些工作。

按主键读取完整行

pg_local_cache 将完整行存储在 PostgreSQL 有界共享内存中。通过身份验证的 RESP MGET 可返回符合条件的缓存行;普通 SQL 不会读取此缓存。未命中或不符合条件的读取会访问源表。该端点使用一个已配置的数据库角色,且不会共享调用方的 SQL 事务或快照。请参阅批量查询指南、技术参考和失效指南。

视图与外部缓存

PostgreSQL 物化视图会存储查询结果,并按需刷新。适用于报告和聚合场景,刷新时间决定数据的新鲜度。

Redis 适合在多个进程间共享应用对象。键、序列化、TTL 和失效均由应用负责。请参阅PostgreSQL 与 Redis cache-aside。可通过快速入门试用行缓存路径。

更新于 .