Redis 缓存数据库
内容已升级至全栈资料库专题页 — 本页保留岗位速查
⚡
本页内容已整合至更权威的专题页面
原来的 Redis 教程已由全栈资料库的专题图解页全面覆盖——包含请求全链路 SVG 图解、5大数据结构深度分析、缓存策略原理和面试高频考点。
建议直接学习以下专题页:原理图解+面试冲刺,深度远超本页原有内容。
运行原理图解
06-Redis 请求全链路 →
Redis 请求全链路 SVG 图解、5大数据结构底层实现、持久化 RDB/AOF、过期策略与淘汰机制、集群架构
面试备战库02-Redis 深度指南 →
Redis 面试高频考点、数据结构选型决策树、缓存三大问题深度分析、分布式锁实现方案
面试备战库05-Redis 面试冲刺攻略 →
Redis 高频面试题 Top 20、集群与哨兵、缓存击穿/穿透/雪崩对比、生产案例复盘
🏭 中际旭创岗位速查
以下是制造业数据可视化项目的 Redis 专用配置和 Node.js 实战代码,不在通用专题页中。
01 — 大屏缓存策略推荐
大屏仪表盘场景下,80% 的数据用 Cache Aside 就够了。OEE 每30秒刷新、告警实时推送、机台状态缓存,都是这个策略。只有设备控制指令这类「必须准确」的数据才考虑 Read Through。
| 数据类型 | 推荐策略 | TTL | 刷新方式 |
|---|---|---|---|
| OEE / 产量统计 | Cache Aside | 30s | 前端定时请求 |
| 机台状态 | Cache Aside | 10s | WebSocket 推送 |
| 告警列表 | Write Behind | 5s | Pub/Sub 实时 |
| 设备控制指令 | Read Through | 不缓存 | 直接查 DB |
| 历史报表 | Cache Aside | 1h | 按需查询 |
02 — Node.js 大屏缓存实战代码
制造业大屏后端最常用的 Redis + MySQL 读写模式:
JavaScript (Node.js) — OEE 缓存读取(Cache Aside)
// 查询 OEE 数据:先查 Redis,没有再查 MySQL 并回填
async function getOeeData(lineId) {
// 1. 先查 Redis 缓存
const cached = await redis.get(`oee:${lineId}`);
if (cached) return JSON.parse(cached);
// 2. 缓存未命中,查 MySQL
const rows = await db.query(
'SELECT * FROM oee_daily WHERE line_id = ? ORDER BY date DESC LIMIT 30',
[lineId]
);
// 3. 写入 Redis,TTL 30秒
await redis.set(`oee:${lineId}`, JSON.stringify(rows), 'EX', 30);
return rows;
}
写入时同步更新缓存:
JavaScript (Node.js) — 写入 MySQL + 更新 Redis
async function updateOeeData(lineId, data) {
// 1. 先更新 MySQL
await db.query(
'INSERT INTO oee_daily (line_id, oee, date) VALUES (?, ?, NOW())',
[lineId, data.oee]
);
// 2. 删除 Redis 缓存(下次查询时重新加载)
await redis.del(`oee:${lineId}`);
// 或者直接更新 Redis(适合高频更新场景)
await redis.set(`oee:${lineId}`, JSON.stringify(data), 'EX', 30);
}
03 — 仪表盘数据 TTL 推荐表
⚠️ TTL 设置原则:不同数据不同过期时间
所有 Key 设相同 TTL = 缓存雪崩风险!大屏项目务必给不同类型数据设不同过期时间,加随机偏移量。
Redis CLI — 批量设置仪表盘缓存(含随机 TTL)
# OEE 数据:30s + 随机0~5s 偏移
$ redis-cli SET oee:line1 "..." EX 32
$ redis-cli SET oee:line2 "..." EX 28
$ redis-cli SET oee:line3 "..." EX 33
# 告警列表:5s 过期(实时性要求高)
$ redis-cli SET alerts:recent "..." EX 5
# 机台状态:10s 过期
$ redis-cli SET machine:status "..." EX 12
# 历史报表:1小时过期
$ redis-cli SET report:daily "..." EX 3605
04 — 缓存三大问题速查(大屏场景)
| 问题 | 大屏场景 | 解决方案 |
|---|---|---|
| 缓存穿透 | 前端传了不存在的产线 ID line999,Redis 没有 → MySQL 也没有 |
① 缓存空值 SET oee:line999 "" EX 60② 接口层校验 ID 合法性 |
| 缓存击穿 | 热点 Key(首页大屏 OEE)过期的瞬间,100个用户同时来查 | ① 互斥锁 SETNX lock:oee:line1② 热点 Key 永不过期 + 异步刷新 |
| 缓存雪崩 | 8条产线 OEE 同时过期,全部打到 MySQL | ① TTL 加随机偏移(30±5s) ② 多级缓存(本地 L1 + Redis L2) |
💡 大屏项目防雪崩配置模板
在 Node.js 中设置随机 TTL 的辅助函数:
function getRandomTTL(base, range = 5) {
return base + Math.floor(Math.random() * range * 2) - range;
}
// 使用: redis.set('oee:line1', data, 'EX', getRandomTTL(30))