Redis INCR 命令详解
Redis INCR 命令详解
1. 基本语法与功能
命令格式
INCR key
功能描述
- 作用:将存储在指定
key
的值增加 1。 - 数据类型要求:
key
必须存储整数值(如 100、-5)。 - 返回值:自增后的值。
- 原子性:操作是原子性的,保证多客户端同时执行时不会出现竞态条件。
2. 示例场景
(1)计数器
# 初始值为 0
INCR page_view # 返回 1
INCR page_view # 返回 2
- 应用:统计网站访问量、文章阅读数、点赞数等。
(2)生成唯一 ID
INCR order_id # 返回 1(首次调用)
INCR order_id # 返回 2
- 应用:分布式系统中生成唯一序列号。
(3)限流
# 记录某个 IP 的请求次数
INCR ip:192.168.1.1:requests# 结合 EXPIRE 设置有效期(例如 10 秒内最多 100 次请求)
EXPIRE ip:192.168.1.1:requests 10 # 设置 10 秒过期
- 应用:限制接口访问频率,防止恶意请求。
3. 底层实现与特性
数据存储
- 实际上,Redis 存储的是二进制字符串,但解析为 64 位有符号整数(范围:-2^63 到 2^63-1)。
原子性保证
- Redis 是单线程模型,所有命令按顺序执行,因此
INCR
不会被中断,无需额外加锁。
自动初始化
- 若
key
不存在,会自动初始化为 0 后再执行自增操作,此时返回 1。
错误处理
- 如果
key
已存在但存储的不是整数(例如 “abc”),则会报错ERR value is not an integer or out of range
。
4. 相关命令
命令 | 作用 | 示例 |
---|---|---|
DECR | 自减 1 | DECR stock |
INCRBY | 增加指定数值 | INCRBY counter 5 |
DECRBY | 减少指定数值 | DECRBY score 3 |
INCRBYFLOAT | 增加浮点数值 | INCRBYFLOAT temp 0.5 |
5. 注意事项
数值范围
- 若操作结果超出 64 位有符号整数范围,则会报错
ERR increment or decrement would overflow
。
性能
INCR
的时间复杂度为 O(1),非常适合高频率调用(例如每秒数千次或更高)。
持久化影响
- 如果启用了 RDB 或 AOF 持久化机制,
INCR
操作会被记录下来,重启后数据不会丢失。
总结
INCR
是 Redis 中最常用的命令之一,主要用于:
- 原子性计数:比如统计页面浏览量。
- 生成唯一 ID:适用于分布式环境下的序列号生成。
其核心优势在于:
- 原子性:无需加锁即可确保线程安全。
- 高性能:单线程执行,O(1) 时间复杂度。
- 自动初始化:不需要预先设置
key
的值。
常见应用场景包括但不限于:统计计数、分布式 ID 生成、限流控制、库存扣减等。