这一章里,把缓存、搜索、消息和分析看成“城市物流系统”。档案馆存真相,物流系统负责让信息更快流、更快找、更快算。
#Redis —— 城市临时仓库
SET user:1:name mizzen
GET user:1:nameRedis 适合:
- 缓存
- 会话
- 计数器
- 分布式锁
- 排行榜
- 简单队列与流
#Elasticsearch / OpenSearch —— 城市检索中心
{
"query": {
"match": { "title": "react tutorial" }
}
}搜索系统不是数据库替代品。
它擅长的是:
- 全文检索
- 排序
- 聚合
- 向量检索和近实时查询
#Kafka —— 城市高速货运干线
producer -> topic -> consumer groupKafka 适合:
- 事件流
- 日志流
- 高吞吐异步解耦
- 长期保留和回放事件
#RabbitMQ —— 城市邮局
exchange -> queue -> consumerRabbitMQ 更像传统消息队列。
它更擅长:
- 投递
- 路由
- ack
- 重试
- 任务分发
#NATS —— 城市广播系统
publisher -> subject -> subscriberNATS 更轻、更快,更像系统内部高速通信总线。
#ClickHouse —— 城市统计局
select count(*) from events where created_at >= today()ClickHouse 适合:
- 分析查询
- 事件统计
- BI
- 高速聚合
- 日志/埋点/风控分析
什么时候别乱用:
别拿 Redis 当长期主库
别拿 Elasticsearch 当事务主库
别拿 Kafka 当任务队列默认替代品
别拿 ClickHouse 当 OLTP 主库这一章的分工关系:
| 类型 | 代表 | 作用 |
|---|---|---|
| 数据库 | PostgreSQL / MySQL / MongoDB | 存正式数据 |
| 缓存 | Redis | 加速、临时状态 |
| 搜索 | Elasticsearch / OpenSearch | 搜索和检索 |
| 流平台 | Kafka | 大规模事件流 |
| 消息队列 | RabbitMQ / NATS | 异步解耦与通信 |
| 分析库 | ClickHouse | 分析与报表 |
现代系统里很常见的一条主干链路是:
OLTP 主库
├──> Redis 做热点加速
├──> Kafka 推事件
├──> Elasticsearch / OpenSearch 建搜索索引
└──> ClickHouse 做统计分析