这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
性能对比:各种锁方案的性能对比
回顾:我们学到了什么?📚
前两节我们学习了两种数据库锁方案:
实战性能测试 🧪
让我们用真实数据来对比性能。
测试环境
测试结果
🔬 测试环境配置:
数据库:MySQL 8.0
服务器:4核8G
连接池:100个连接
测试场景:
低并发: 100请求 / 100库存
中并发: 500请求 / 100库存
高并发: 1000请求 / 100库存
超高并发: 5000请求 / 100库存
================================================================================
📊 性能对比测试结果
================================================================================
🎯 场景:低并发 (100请求 / 100库存)
--------------------------------------------------------------------------------
指标 悲观锁 乐观锁 差异
--------------------------------------------------------------------------------
总耗时(ms) 1000.00 200.00 5.00x
平均响应(ms) 10.00 2.00 5.00x
QPS 100 500 5.00x
成功率 100.0% 100.0% -
冲突率 - 0.0% -
性能评估:
❌ 乐观锁:不满足秒杀需求(QPS: 500 < 500,000)
🎯 场景:超高并发 (5000请求 / 100库存)
--------------------------------------------------------------------------------
指标 悲观锁 乐观锁 差异
--------------------------------------------------------------------------------
总耗时(ms) 50000.00 19000.00 2.63x
平均响应(ms) 10.00 3.80 2.63x
QPS 100 263 2.63x
成功率 2.0% 2.0% -
冲突率 - 98.0% -
性能评估:
❌ 乐观锁:不满足秒杀需求(QPS: 263 < 500,000)性能瓶颈分析 🔍
为什么数据库锁方案性能不够?
锁方案选择指南 📖
根据不同的场景,选择不同的方案:
数据对比大表 📊
性能对比总表
| 方案 | QPS | 延迟 | 一致性 | 复杂度 | 成本 | 适用场景 |
|---|---|---|---|---|---|---|
| 悲观锁 | 1,000-5,000 | 10-100ms | 强一致 | ⭐ | 💰 | 后台管理 |
| 乐观锁 | 5,000-20,000 | 2-20ms | 最终一致 | ⭐⭐ | 💰 | 普通电商 |
| 乐观锁+缓存 | 10,000-50,000 | 1-10ms | 最终一致 | ⭐⭐⭐ | 💰💰 | 促销活动 |
| Redis原子操作 | 100,000-500,000 | 0.1-1ms | 最终一致 | ⭐⭐⭐⭐ | 💰💰💰 | 秒杀活动 |
| 完整秒杀架构 | 500,000+ | 10-100ms | 最终一致 | ⭐⭐⭐⭐⭐ | 💰💰💰💰 | 超级秒杀 |
成本对比
总结:秒杀场景的困境与出路 🎯
想一想
问题 1:为什么数据库性能有上限?
提示:
- 磁盘I/O速度
- 网络延迟
- 锁竞争
- 连接数限制
问题 2:如何突破数据库的性能瓶颈?
提示:
- 内存 vs 磁盘
- 同步 vs 异步
- 单机 vs 分布式
- 强一致 vs 最终一致
问题 3:秒杀场景最看重什么?
提示:
- 性能
- 一致性(不超卖、不少卖)
- 可用性
- 成本