选择同时部署 Redis 和 MySQL 的云服务器配置,没有绝对的“标准答案”,因为最终取决于你的业务数据量、并发量(QPS)、读写比例以及缓存命中率。
Redis 是内存密集型应用,而 MySQL 对 CPU 单核性能和磁盘 I/O 较为敏感。以下是针对不同场景的配置建议及核心考量因素:
1. 场景化配置推荐
A. 开发/测试环境 / 个人博客 / 低流量站点
- 适用情况:日访问量 < 5,000,数据量较小(GB 级别),主要用于学习或原型验证。
- 推荐配置:
- CPU:2 核 (vCPU)
- 内存:4 GB
- 分析:MySQL 本身占用约 1-1.5GB 内存,Redis 分配 1-2GB 即可满足大部分需求。2 核 CPU 足以应对低频查询。
- 注意:需限制 MySQL 的
innodb_buffer_pool_size(建议设为物理内存的 30%-40%),防止内存溢出。
B. 中小型生产环境 / 电商促销期 / 一般企业应用
- 适用情况:日访问量 5 万 – 50 万,数据量在几十 GB 以内,有一定的并发读取需求。
- 推荐配置:
- CPU:4 核 (vCPU)
- 内存:8 GB 或 16 GB
- 分析:
- 8GB 方案:MySQL 分配 4GB 缓冲池,Redis 分配 3GB,预留 1GB 给操作系统和其他进程。适合读多写少场景。
- 16GB 方案:更从容,MySQL 可分配 8GB+,Redis 可存储更多热点数据,大幅降低回源数据库的压力。
- 关键点:此阶段建议开启 Redis 持久化(RDB+AOF)和 MySQL 的 Binlog,需关注磁盘 I/O 性能。
C. 中大型生产环境 / 高并发 / 核心交易系统
- 适用情况:日访问量 > 100 万,数据量 TB 级,高 QPS,对延迟极其敏感。
- 推荐配置:
- CPU:8 核及以上 (建议高频 CPU)
- 内存:32 GB 起步,甚至 64 GB+
- 分析:
- 分离部署:在如此规模下,强烈建议将 Redis 和 MySQL 部署在不同的服务器上(例如:Redis 专用大内存机器,MySQL 专用高 IO 机器)。如果必须同机,至少需要 8C32G 以上,且必须做好严格的资源隔离(如 cgroups 限制)。
- 内存策略:此时 Redis 应作为全量热点数据的缓存,尽量让所有热点数据都在内存中;MySQL 则负责持久化和复杂计算。
2. 核心资源分配原则
在同机部署时,必须遵循以下资源分配逻辑,避免“争抢”导致系统崩溃:
| 组件 | 资源敏感度 | 配置建议 | 关键参数调整 |
|---|---|---|---|
| Redis | 极度依赖内存 CPU 要求较低(除非做大量复杂运算) |
内存占比:50% – 70% CPU:1-2 核通常足够 |
maxmemory:设置为总内存的 60%-70%maxmemory-policy:根据业务选 allkeys-lru 等 |
| MySQL | 依赖 CPU 单核性能 + 磁盘 I/O 内存用于缓冲池 |
内存占比:30% – 50% CPU:主要看单核主频 |
innodb_buffer_pool_size:设为可用内存的 50%-70%关闭不必要的日志插件以节省 I/O |
| 操作系统 | 基础运行 | 预留 10% – 20% | 确保有 Swap 分区(虽不推荐频繁使用,但防 OOM) |
3. 避坑指南与最佳实践
-
内存溢出(OOM)风险:
- 这是最常见的故障。如果 Redis 和 MySQL 同时试图吃满内存,Linux 内核会触发 OOM Killer,随机杀掉其中一个进程。
- 对策:务必在配置文件中显式限制两者的最大内存值,不要让它们无限制增长。
-
磁盘 I/O 瓶颈:
- MySQL 的写入操作(Binlog、Redo Log)非常消耗 I/O。如果使用的是云服务器的普通云盘(非 SSD 或 ESSD),在高并发下可能会卡顿。
- 对策:优先选择 ESSD PL1/PL2 级别的云盘,或者为 MySQL 单独挂载一块高性能数据盘。
-
网络带宽:
- 如果 Redis 和 MySQL 在同一台服务器,它们之间的内网通信不会消耗公网带宽,这点是优势。但如果你的应用端访问量大,需关注服务器的公网出带宽是否充足。
-
架构演进建议:
- 初期:同机部署(省钱、管理方便)。
- 中期:当单台服务器负载持续超过 70%,或出现明显的 I/O 等待时,立即拆分。
- 方案 A:Redis 独立成库(利用大内存优势)。
- 方案 B:MySQL 独立成库(利用高 IO 优势)。
- 方案 C:使用云厂商托管服务(如阿里云 RDS + 云数据库 Redis 版),虽然贵一点,但能省去运维调优的精力,稳定性更高。
总结建议
- 起步推荐:2 核 4GB(仅限测试或极低流量)。
- 稳妥生产推荐:4 核 8GB 或 4 核 16GB(适用于大多数中小型企业应用)。
- 重要提示:无论选择多大配置,请务必在启动前手动限制 Redis (
maxmemory) 和 MySQL (innodb_buffer_pool_size) 的内存使用上限,预留至少 10% 给操作系统,防止系统因内存耗尽而死机。
PHPWP博客