redis和postgresql组合( Linux 系统检查 Web 平台)
核心分工:各司其职
| 维度 | Redis | PostgreSQL |
|---|---|---|
| 定位 | 高速缓存层(内存) | 持久化存储层(磁盘) |
| 读写速度 | 微秒级 | 毫秒级 |
| 数据持久性 | 可丢失(重启清空) | 永久保存 |
| 承担角色 | 前端加速、缓冲、队列 | 数据最终归宿、权威数据源 |
简单来说:PostgreSQL 是"仓库",Redis 是"前台货架"。仓库里什么都有但取货慢,货架上只放热销品但取货极快。
协作流程:缓存回源机制
以"查询服务器详情"为例,整个协作流程如下:
用户请求 → 查询 Redis(键:servers:detail:{id})
│
├─→ 命中 ✅ → 直接返回数据(耗时极短)
│
└─→ 未命中 ❌ → 查询 PostgreSQL 数据库
│
└─→ 拿到数据后,写入 Redis(TTL=10分钟)
└─→ 返回数据给用户
这个过程叫做"缓存回源"——Redis 没有就去数据库取,取到后顺手存一份到 Redis,下次就不用再查数据库了。
具体协作场景
场景一:服务器列表查询
-
第一次请求:Redis 中没有
servers:list→ 查询 PostgreSQL → 结果写入 Redis(TTL=5分钟) -
接下来5分钟内的所有请求:直接从 Redis 读取,PostgreSQL 完全不被打扰
-
5分钟后:Redis 缓存过期,下一次请求重新回源到 PostgreSQL
场景二:监控指标实时更新
-
Agent 采集到的最新指标先写入 Redis(
metrics:latest:{id},TTL=1分钟) -
定期将 Redis 中的指标批量持久化到 PostgreSQL,避免频繁写磁盘
-
用户查看实时图表时,从 Redis 读取最新数据,速度极快
场景三:异步任务结果存储
-
Celery 后台任务(如生成巡检报告)执行过程中,中间状态和最终结果先存 Redis
-
任务完成后,关键结果同步写入 PostgreSQL 做永久保存
-
用户查询任务进度时,从 Redis 快速获取状态
场景四:用户权限校验
-
用户登录时,从 PostgreSQL 读取权限数据 → 缓存到 Redis(
user:permissions:{id},TTL=15分钟) -
后续每次接口调用需要校验权限时,直接从 Redis 读取,无需反复查数据库
数据一致性保障
-
写操作:先写 PostgreSQL,成功后删除或更新对应的 Redis 缓存键,确保下次读取能拿到最新数据
-
缓存失效:通过 TTL(过期时间)机制,即使缓存和数据库短暂不一致,最多在 TTL 时间内自动恢复
-
主动刷新:当数据被修改时(如告警规则更新),主动清除
alerts:rules缓存,触发下次回源
降级时的协作变化
当 Redis 不可用时,系统自动降级:
| 正常状态 | Redis 宕机后 |
|---|---|
| 读请求 → Redis →(未命中)→ PostgreSQL | 读请求 → 直接 PostgreSQL |
| 写请求 → PostgreSQL + 更新 Redis | 写请求 → 只写 PostgreSQL |
| 任务队列 → Redis List | 任务队列 → 降级为同步执行 |
系统仍然能运行,但所有压力都转嫁给了 PostgreSQL,数据库负载会显著上升。
总结
Redis 和 PostgreSQL 的关系可以用一句话概括:Redis 负责"快",PostgreSQL 负责"稳"

浙公网安备 33010602011771号