第 3 章 · 文档库与缓存:MongoDB / Redis / Memcached
3.1 MongoDB 7
适用场景
| 选用 | 不选用 |
|---|---|
| 商品详情、用户画像、日志文档等 Schema 多变 数据 | 强事务跨多行金融核心(优先 MySQL/PG) |
| 嵌套 JSON、数组字段频繁变更 | 复杂多表 JOIN 报表(优先 SQL) |
| 快速迭代、文档模型与代码对象一一对应 | 需要严格外键约束 |
商店部署参数
| 项 | 值 |
|---|---|
| id | mongodb |
| 镜像 | mongo:7 |
| 端口 | 27017 |
| PVC | 20 Gi → /data/db |
| 资源 | 中型 · 2 核 4Gi |
环境变量
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: "admin"
- name: MONGO_INITDB_ROOT_PASSWORD
value: "强密码"
# 可选:启动时建库
- name: MONGO_INITDB_DATABASE
value: "appdb"
连接语法
URI(标准)
mongodb://admin:密码@mongodb:27017/appdb?authSource=admin
带副本集(多节点自建后)
mongodb://user:pass@host1:27017,host2:27017/appdb?replicaSet=rs0
mongosh(终端)
mongosh "mongodb://admin:密码@localhost:27017/admin"
常用操作语法
// 切库
use appdb
// 插入
db.products.insertOne({
sku: "A001",
name: "示例商品",
tags: ["hot", "new"],
price: NumberDecimal("99.90"),
createdAt: new Date()
})
// 查询
db.products.find({ tags: "hot" }).sort({ createdAt: -1 }).limit(20)
// 索引
db.products.createIndex({ sku: 1 }, { unique: true })
db.products.createIndex({ tags: 1 })
// 聚合
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } }
])
// 运维
db.serverStatus().connections
db.stats()
业务集成
Spring Boot
spring:
data:
mongodb:
uri: mongodb://admin:密码@mongodb:27017/appdb?authSource=admin
Node.js Mongoose
mongoose.connect('mongodb://admin:密码@mongodb:27017/appdb?authSource=admin')
Python PyMongo
client = MongoClient("mongodb://admin:密码@mongodb:27017/?authSource=admin")
db = client["appdb"]
小紫运维
磁盘涨得快 → 存储 扩容;索引构建占 CPU → 资源 临时升高;认证失败检查 authSource=admin。
3.2 Redis 7
适用场景
| 场景 | 数据结构 |
|---|---|
| 用户 Session、登录 Token | String + TTL |
| 商品详情页缓存 | String / Hash |
| 接口限流、计数器 | String INCR + EXPIRE |
| 排行榜 | Sorted Set |
| 消息广播(轻量) | Pub/Sub |
| 分布式锁 | SET key val NX EX 30 |
不选用:持久化为主库(用 MySQL);超大 value(>512MB);需要可靠队列(用 RabbitMQ/Kafka)。
商店部署参数
| 项 | 值 |
|---|---|
| id | redis |
| 镜像 | redis:7-alpine(Alpine) |
| 端口 | 6379 |
| PVC | 5 Gi → /data(开启 AOF/RDB 时建议) |
| 资源 | 标准 · 1 核 2Gi |
环境变量与启动配置
方式一:命令行启 requirepass(推荐,确认页 YAML)
command: ["redis-server"]
args: ["--requirepass", "Redis强密码", "--appendonly", "yes"]
方式二:挂载 redis.conf(生产)
requirepass Redis强密码
appendonly yes
maxmemory 1gb
maxmemory-policy allkeys-lru