Redis集合自增操作详解与实战案例,网友推荐:高效实用,开发必备

文章导读
Redis的集合自增操作主要使用HINCRBY命令,对Hash中的字段值进行原子自增,这是开发中计数、统计场景的利器。下面是实战代码示例:redis 127.0.0.1:6379> HINCRBY user:score 1001 1(integer) 10redis 127.0.0.1:6379> HINCRBY user:score 1001 5(integer) 15解释:user
📋 目录
  1. 实战案例一:用户签到积分
  2. 实战案例二:商品浏览量统计
  3. 集合自增值详解
  4. 排行榜实现
  5. 性能优化Tips
  6. FAQ
A A

Redis的集合自增操作主要使用HINCRBY命令,对Hash中的字段值进行原子自增,这是开发中计数、统计场景的利器。下面是实战代码示例:
redis 127.0.0.1:6379> HINCRBY user:score 1001 1
(integer) 10
redis 127.0.0.1:6379> HINCRBY user:score 1001 5
(integer) 15
解释:user:score是hash key,1001是field,1是增量,实现用户积分累加,高并发无锁安全。

实战案例一:用户签到积分

每天签到给用户加10分,用HINCRBY user:points {user_id} 10;每月重置hash或用EXPIRE设置过期。代码:
$redis->hIncrBy('user:points:'.$uid, 'daily', 10);
网友说:简单高效,替代数据库update set points=points+10,性能提升100倍!

实战案例二:商品浏览量统计

每个商品hash key: item:views:{item_id},每次访问HINCRBY key 1。
redis> HINCRBY goods:views 12345 1
(integer) 567
聚合多个商品用PIPELINE批量执行,避免网络RTT。开发必备,PV统计零压力。

Redis集合自增操作详解与实战案例,网友推荐:高效实用,开发必备

集合自增值详解

INCRBY对string自增,HINCRBY对hash field自增,支持负数递减如HINCRBY key field -1。原子性保证高并发正确性。Lua脚本扩展:
local newval = redis.call('HINCRBY', KEYS[1], ARGV[1], ARGV[2])
if newval > 100 then return 1 end
return 0

排行榜实现

用Sorted Set结合自增:ZINCRBY leaderboard user_id 1,然后ZREVRANGE取top10。
redis> ZINCRBY score:board user1 10
redis> ZREVRANGE score:board 0 9 WITHSCORES
高效实用,游戏分数、热搜榜单首选。

Redis集合自增操作详解与实战案例,网友推荐:高效实用,开发必备

性能优化Tips

自增值别太大,避免int溢出用LLEN或自定义检查;Hash field过多用多个hash分片;监控内存用INFO memory。网友推荐日常开发神器!

FAQ

Q: HINCRBY和INCRBY区别?
A: HINCRBY是hash field自增,INCRBY是string key自增。
Q: 支持浮点自增吗?
A: Redis 2.6+的HINCRBYFLOAT支持浮点。
Q: 高并发下丢数据?
A: 原子操作不会丢,单机万QPS稳。
Q: 自增值可以负数?
A: 可以,HINCRBY key field -5 递减。
Q: 怎么重置计数?
A: DEL key 或 HDEL key field。