这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
Redis 原子递增
Redis 是高性能的键值存储,其原子递增命令非常适合用于生成分布式 ID。
基本原理
1. INCR 命令
定义: Redis 的 INCR 命令将键的值加 1,并返回新值。这是一个原子操作。
语法:
验证要点
- 命令只用于验证系统状态,读者不需要记具体参数。
示例:
验证要点
- 命令只用于验证系统状态,读者不需要记具体参数。
2. 原子性保证
特点:
✅ 原子操作
✅ 无需锁
✅ 线程安全
✅ 分布式安全基本实现
1. 简单递增
Java 实现:
2. 带初始值
Java 实现:
高级实现
1. 批量获取
原理: 一次获取多个 ID,减少 Redis 访问。
实现:
性能提升:
原来:每次请求都访问 Redis
现在:1000 次请求才访问 Redis 一次
性能提升:1000x2. 业务隔离
原理: 为不同业务类型使用不同的键。
实现:
特性分析
优点
1. 高性能 ⭐⭐⭐⭐⭐
QPS:> 100,000
延迟:< 1ms
基于内存,速度极快2. 原子性 ⭐⭐⭐⭐⭐
✅ 原子操作
✅ 无需锁
✅ 线程安全
✅ 分布式安全3. 简单易用 ⭐⭐⭐⭐⭐
✅ 实现简单
✅ 代码少
✅ 易于维护
✅ 易于理解4. 递增性 ⭐⭐⭐⭐
✅ 严格递增
✅ 有序性好
✅ 便于查询
✅ 便于排序缺点
1. 依赖 Redis ⭐⭐⭐⭐⭐
❌ Redis 故障无法生成
❌ 单点故障
❌ 依赖外部服务2. 序列恢复 ⭐⭐⭐⭐
❌ Redis 重启后序列可能重置
❌ ID 不连续
❌ 需要持久化3. 性能瓶颈 ⭐⭐⭐
❌ 超高并发可能成为瓶颈
❌ 网络延迟
❌ 需要优化性能优化
1. 本地缓存
原理: 在本地缓存一批 ID,减少 Redis 访问。
实现:
2. Pipeline 批量操作
原理: 使用 Redis Pipeline 批量执行命令。
实现:
适用场景
✅ 适合使用
1. 中高并发系统
QPS:10,000 - 100,000
延迟要求:< 1ms
已有 Redis 基础设施2. 递增性重要
需要严格递增
需要有序查询
需要范围查询3. 简单场景
不想引入复杂组件
需要快速实现
维护成本要求低❌ 不适合使用
1. 超高并发系统
QPS > 100,000
极低延迟要求
Redis 压力大2. 无 Redis 基础设施
没有 Redis 集群
不想引入新组件
运维成本高最佳实践
1. 使用批量获取
2. 使用本地缓存
3. 监控 Redis 性能
验证要点
- 命令只用于验证系统状态,读者不需要记具体参数。
总结
Redis 方案评价
| 维度 | 评分 | 说明 |
|---|---|---|
| 唯一性 | ⭐⭐⭐⭐⭐ | Redis 保证 |
| 有序性 | ⭐⭐⭐⭐⭐ | 严格递增 |
| 性能 | ⭐⭐⭐⭐ | 高性能 |
| 可用性 | ⭐⭐⭐ | 依赖 Redis |
| 扩展性 | ⭐⭐⭐ | 受限 |
使用建议
推荐使用:
✅ 中高并发系统
✅ 已有 Redis
✅ 需要递增性
✅ 简单场景不推荐使用:
❌ 超高并发系统
❌ 无 Redis 基础设施
❌ 需要极致性能下一步
了解了 Redis 方案后,我们学习 Redis 集群方案。
👉 下一节:集群方案