Redis 原子递增

Redis 是高性能的键值存储,其原子递增命令非常适合用于生成分布式 ID。

基本原理

1. INCR 命令

定义: Redis 的 INCR 命令将键的值加 1,并返回新值。这是一个原子操作。


语法

验证要点

  • 命令只用于验证系统状态,读者不需要记具体参数。

示例

验证要点

  • 命令只用于验证系统状态,读者不需要记具体参数。

2. 原子性保证

特点

✅ 原子操作
✅ 无需锁
✅ 线程安全
✅ 分布式安全

基本实现

1. 简单递增

Java 实现


2. 带初始值

Java 实现


高级实现

1. 批量获取

原理: 一次获取多个 ID,减少 Redis 访问。


实现


性能提升

原来:每次请求都访问 Redis
现在:1000 次请求才访问 Redis 一次
性能提升:1000x

2. 业务隔离

原理: 为不同业务类型使用不同的键。


实现


特性分析

优点

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 集群方案。

👉 下一节:集群方案