🌙

redis和postgresql组合( Linux 系统检查 Web 平台)

Redis 和 PostgreSQL 组合是典型的"高速缓存 + 持久化存储"组合,它们分工明确、协同工作。下面详细解释它们的协作关系:


核心分工:各司其职

维度RedisPostgreSQL
定位 高速缓存层(内存) 持久化存储层(磁盘)
读写速度 微秒级 毫秒级
数据持久性 可丢失(重启清空) 永久保存
承担角色 前端加速、缓冲、队列 数据最终归宿、权威数据源

简单来说: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 读取,无需反复查数据库


数据一致性保障

由于 Redis 是缓存、PostgreSQL 是权威数据源,系统需要处理两者之间的数据一致性问题:

  • 写操作:先写 PostgreSQL,成功后删除或更新对应的 Redis 缓存键,确保下次读取能拿到最新数据

  • 缓存失效:通过 TTL(过期时间)机制,即使缓存和数据库短暂不一致,最多在 TTL 时间内自动恢复

  • 主动刷新:当数据被修改时(如告警规则更新),主动清除 alerts:rules 缓存,触发下次回源


降级时的协作变化

当 Redis 不可用时,系统自动降级:

正常状态Redis 宕机后
读请求 → Redis →(未命中)→ PostgreSQL 读请求 → 直接 PostgreSQL
写请求 → PostgreSQL + 更新 Redis 写请求 → 只写 PostgreSQL
任务队列 → Redis List 任务队列 → 降级为同步执行

系统仍然能运行,但所有压力都转嫁给了 PostgreSQL,数据库负载会显著上升。


总结

Redis 和 PostgreSQL 的关系可以用一句话概括:Redis 负责"快",PostgreSQL 负责"稳"。Redis 挡在前面吸收绝大部分读请求和流量冲击,PostgreSQL 在背后安静地做数据的最终持久化。两者配合,既保证了系统的高性能,又保证了数据的可靠性和一致性。

posted @ 2026-06-20 15:46  星火撩原  阅读(4)  评论(0)    收藏  举报
本站已运行:0
🌙 夜间模式
🌙
🌙