上一篇
"叮咚~" 你的手机又响了,打开发现是好友小王给你昨晚发的旅行照片点了赞,这个看似简单的数字+1操作背后,可能正有一个Redis计数器在默默工作,今天我们就来揭开这个"数字魔术师"的神秘面纱!
在传统数据库中实现计数器(比如MySQL),每次+1操作都要:
而Redis的计数器操作只需要一条原子命令!🚀 它的优势在于:
> SET article:123:likes 0 # 初始化 OK > INCR article:123:likes # +1操作 (integer) 1 > GET article:123:likes # 获取值 "1"
适用场景:简单点赞数、页面PV统计
> HSET post:8848 counters likes 0 views 0 # 初始化多个计数器 (integer) 2 > HINCRBY post:8848 counters likes 1 # 点赞+1 (integer) 1 > HINCRBY post:8848 counters views 1 # 浏览+1 (integer) 1 > HGETALL post:8848 counters # 获取所有计数器 1) "likes" 2) "1" 3) "views" 4) "1"
适用场景:需要同时管理多个关联计数器的场景(如文章的点赞、收藏、评论数)
> SETBIT user:2025:login 100 1 # 记录第100天登录 (integer) 0 > BITCOUNT user:2025:login # 统计总登录天数 (integer) 1
适用场景:用户活跃天数统计、特征标记
> PFADD page:index:uv user1 user2 user3 # 记录UV (integer) 1 > PFCOUNT page:index:uv # 获取UV估算值 (integer) 3
适用场景:UV统计(允许1%以内误差)
-- 实现先比较再递增的复合操作 local current = redis.call('GET', KEYS[1]) if tonumber(current) < tonumber(ARGV[1]) then return redis.call('INCR', KEYS[1]) end return -1
适用场景:秒杀库存扣减等需要复杂逻辑的计数场景
try: count = redis.incr("product:123:stock") except ConnectionError: # 1. 本地缓存操作 # 2. 记录到消息队列 # 3. 告警通知
# 对于大数值,使用32位整数存储 > SET counter:int32 0 > INCRBY counter:int32 1000000 > OBJECT ENCODING counter:int32 # 查看编码方式 "int"
-- KEYS[1]: 库存key -- ARGV[1]: 购买数量 local stock = tonumber(redis.call('GET', KEYS[1])) if stock >= tonumber(ARGV[1]) then redis.call('DECRBY', KEYS[1], ARGV[1]) return 1 -- 成功 end return 0 -- 库存不足
# 使用过期时间实现每日重置 > SET user:123:api_calls 0 EX 86400 # 24小时后自动过期 > INCR user:123:api_calls (integer) 1 > TTL user:123:api_calls # 查看剩余时间 (integer) 86399
# 使用集合存储在线用户ID > SADD online_users user1 user2 user3 (integer) 3 > SCARD online_users # 获取在线人数 (integer) 3 > SREM online_users user1 # 用户下线 (integer) 1
方案 | 10万次操作耗时 | 内存占用 |
---|---|---|
Redis INCR | 8秒 | 16字节/计数器 |
MySQL UPDATE | 3秒 | 复杂索引开销 |
本地内存变量 | 2秒 | 无持久化风险 |
Q:为什么我的INCR操作突然变慢了? A:检查是否触发了RDB持久化,建议:
Q:计数器值丢失了怎么办? A:分级恢复策略:
Q:如何实现分布式全局序列?
# 使用Redis集群时 > INCR global:sequence # 简单但可能有跳跃 > INCRBY global:seq 1000 # 预分配区间(更高效)
根据2025年Redis社区路线图,计数器功能将迎来两项重大升级:
下次当你在社交媒体上看到那个小小的数字变化时,别忘了背后这套精妙的计数系统正在为你服务!🎉
小知识:Twitter的点赞计数器就是使用类似方案,在2025年峰值时处理了每分钟2000万+的点赞操作。
本文由 野雅琴 于2025-08-06发表在【云服务器提供商】,文中图片由(野雅琴)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/553242.html
发表评论