*Redis INCREX 命令
INCREX 对 key 的值执行原子性递增,并可设置或重置过期时间。
*语法
INCREX key increment [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名 |
| increment | Integer | 是 | 增量值 |
| EX | Integer | 否(四选一) | 过期时间(秒) |
| PX | Integer | 否(四选一) | 过期时间(毫秒) |
| EXAT | Integer | 否(四选一) | 绝对过期时间戳(秒) |
| PXAT | Integer | 否(四选一) | 绝对过期时间戳(毫秒) |
*返回值
- Integer:递增后的新值
- Error:值不是整数或 key 不是 String 类型
*时间复杂度
O(1)
*
*示例
*基本递增
> INCREX counter 1
(integer) 1
> INCREX counter 1
(integer) 2
*递增并设置过期时间
> INCREX visitor 1 EX 3600
(integer) 1
> TTL visitor
(integer) 3600
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 String 类型 | 确认 key 类型为 String |
| ERR value is not an integer | 当前值不是整数 | 确认值可解析为整数 |
*最佳实践
- 适合计数器场景,同时保证计数器不会永久存在
- 原子性递增和设置过期,避免竞态条件
- 配合 EX 实现滑动窗口计数器
*FAQ
Q1: INCREX 和 INCR 有什么区别? A: INCREX 在递增的同时可以设置/刷新过期时间。
Q2: key 不存在会怎样? A: 创建 key 并设置值为 increment,同时设置过期时间(如果指定)。
Q3: 过期时间会刷新吗? A: 如果指定了过期选项,每次执行都会重新设置过期时间。