字段级原子计数是什么
在哈希的某个字段上做原子加减:适合按对象维度累计统计,例如用户积分、商品维度的销量、各状态计数。字段不存在时按零起算,命令返回加完之后的数值,因此可以一次调用同时完成累加与读取。
基本信息
| 整数计数 | HINCRBY 键 字段 增量,增量可为负数 |
|---|---|
| 浮点计数 | HINCRBYFLOAT 键 字段 增量,存在浮点精度边界 |
| 返回 | 操作后的新值(字符串形式) |
| 初始值 | 字段不存在时按 0 处理,不影响其他字段 |
| 错误场景 | 对非整数内容执行整数自增会报错 |
典型使用场景
- 用户行为统计:按用户维度统计浏览、点赞、分享次数
- 商品维度计数:同一商品的多类指标放在一个哈希里一次取出
- 库存与配额:整数字段做加减,配合业务校验控制超卖
- 状态汇总:把不同状态的计数集中在一个键里,便于汇总展示
- 日报临时聚合:临时键计数并设置过期,避免长期堆积
示例
示例
HINCRBY stat:u1001 pv 1 # 首次计数,返回 1
HINCRBY stat:u1001 pv 10 # 累加,返回 11
HINCRBY stat:u1001 pv -3 # 支持负数,返回 8
HINCRBYFLOAT stat:u1001 amount 9.9 # 浮点累加,返回 9.9
HGET stat:u1001 pv # 读取单字段
HGETALL stat:u1001 # 一次性取出全部计数
EXPIRE stat:u1001 604800 # 给统计键设置过期,避免长期堆积输出逐列读法
| 返回 | 含义 | 注意 |
|---|---|---|
| 整数或数字字符串 | 累加后的新值 | 可直接用于阈值判断 |
| 浮点字符串 | 浮点累加结果 | 不宜做金额精确统计 |
| 错误 | 字段内容不是整数 | 对已存字符串的字段做整数自增会失败 |
| 类型错误 | 键不是哈希结构 | 键类型被其他命令写成字符串时冲突 |
多个计数放在同一个哈希里便于一次取出全部指标;但数量过多会让哈希从紧凑编码退化为哈希表编码,内存开销上升。
金额类统计不要用浮点累加:反复相加会累积误差,存整数分并自行换算更稳。