首先,我要坦白一件事:
多年来,我一直认为 Redis 和 Memcached 几乎是相同的。
两者速度都很快,都驻留在内存中,并且在架构图中都被归入“缓存”框中。
- redis vs Memcached
但几个月前,我们试图进一步提升内部 API 的性能。我们采取了积极的缓存策略。但性能扩展并没有达到预期效果——尤其是在流量高峰期。
所以我做了我早就应该做的事。
我对比测试了 Redis 和 Memcached 的性能。
理论上不行。本地主机上不行。但在生产环境的配置下不行。真正的虚拟机。真实的流量。真正的痛苦。
以下是我学到的东西。
我们当时想做什么
我们提供以下服务:
- 每秒大约收到 15 万个请求(不开玩笑)
- 缓存较小的数据块(每个约 300 字节)
- TTL 为 10 秒
- 90% 读取,10% 写入
所以,这就是经典的缓存机制。
我们之前使用的是 Redis,但团队里有人建议 Memcached 可能更快。所以我们对两者都进行了测试。
测试环境(不搞噱头)
以下是我们的设置方式:
- Redis 7,集群模式,3 个主节点,已启用 I/O 线程
- Memcached 1.6,3个实例
- GCP 虚拟机:32 个虚拟 CPU、128GB 内存、固态硬盘、10Gbps 内部网络
- 使用官方客户端,用 Go 语言编写的客户端
k6使用独立箱子模拟负载- 通过 Grafana 监控所有数据(Redis/Memcached 导出器)
没有本地主机技巧,没有 Docker 噪音,只有虚拟机之间的原始流量。
我们每次测试运行约 30 分钟,以便观察系统在压力下的表现。
发生了什么
Memcached 速度更快……阅读量
我们首先进行了以读取为主的测试(90% 读取,10% 写入)。以下是我们观察到的大致结果:







