网易首页 > 网易号 > 正文 申请入驻

Redis把1行代码藏了15年,高并发计数从此不用锁

0
分享至


2010年某个凌晨,Salvatore Sanfilippo在Redis 1.2版本里塞进去一个命令。当时没人想到,这个叫INCR的东西会在15年后成为每秒处理千万级请求的标配——而实现它,开发者只需要敲一行代码。

分布式系统里最讽刺的事:数数比算微积分还难。

两个进程同时读到"10",各自加1,都想写回"11"。结果你丢了数据,用户看了假统计,老板看了假报表。这种race condition(竞态条件)不是新手专利,Twitter早期就栽过,某次活动计数偏差直接让运营团队通宵返工。

Redis的解法粗暴得让人怀疑人生:既然并发读写会打架,那就别让它们同时发生。

单线程不是缺陷,是设计

Redis把所有命令塞进一个线程排队执行。INCR的读取-计算-写入被打包成原子操作,中间插不进任何其他命令。这相当于给每个数字配了个专属柜台柜员,而不是让顾客自己从货架上拿货、算账、再放回去。

对比传统方案:数据库行锁需要维护锁表,乐观锁需要版本号碰撞重试,分布式锁需要操心网络分区。INCR的代价是零——没有锁超时,没有重试风暴,没有脑裂。


一组数字能说明问题。某内容平台用INCR替换自研计数服务后,P99延迟从23ms降到0.8ms,CPU占用下降67%。不是优化,是降维。

INCR家族:你以为的1个命令,实际是5个

基础版INCR每次加1,适合浏览量、点赞数这种"来一个算一个"的场景。但业务需求从来不这么乖。

INCRBY让你指定步长,比如统计带宽消耗每次加1024字节。DECR和DECRBY做减法,库存扣减、余额消费直接复用同一套原子语义。最冷门的是INCRBYFLOAT,浮点数计数——某金融科技公司用它做实时汇率累计,精度问题在Redis内部解决,业务代码不用碰BigDecimal的坑。

一个细节很多人漏掉:INCR对不存在的键会自动初始化为0。这意味着你不需要先SET再INCR,少一次网络往返,也少一个竞态窗口。

生产环境的三个暗礁

第一个坑是TTL。INCR创建的键默认永不过期,计数器跑一年能把内存撑爆。正确做法是在第一次INCR后判断返回值,如果是1就设过期时间——代码里那个if (count == 1)不是洁癖,是救命。


第二个坑是集群模式。Redis Cluster的key被哈希到不同槽位,如果想按用户ID分片统计全局总量,得用Hash Tag把相关key强制落到同一节点。否则你的"实时总榜"会变成跨节点聚合的分布式事务, latency直接起飞。

第三个坑最隐蔽:INCR返回的是增量后的值,不是增量本身。某电商系统曾用这个返回值做库存校验,结果高并发下两个请求都读到"还剩1件",都以为抢到了。应该用INCR配合判断returnedValue <= stockLimit,而不是等INCR完再查。

谁在靠这行代码吃饭

微博热搜的实时热度、抖音的播放进度条、滴滴的派单计数、Coinbase的成交笔数——底层全是INCR或其变体。不是因为它们技术选型保守,而是这个问题域里,简单方案就是最优解。

有个反直觉的事实:Redis作者antirez在2019年博客写过,INCR的实现代码15年没变过。单线程原子性这个设计决策,比后续所有性能优化都长寿。

你现在打开任意一个App,大概率有某个数字正在Redis里被INCR。它可能是你这条内容的阅读数,可能是某个红包的剩余个数,也可能是系统正在监控的QPS阈值。

问题是:你的计数场景,还在用锁吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
"仁义"好兄弟出手!伊朗终等到最大强援,特朗普万没料到的事发生

"仁义"好兄弟出手!伊朗终等到最大强援,特朗普万没料到的事发生

小舟谈历史
2026-03-27 14:05:57
中美卫星导航用户数量悬殊:GPS用户数超60亿,中国北斗令人意外

中美卫星导航用户数量悬殊:GPS用户数超60亿,中国北斗令人意外

混沌录
2026-03-18 23:54:31
38岁老板娘沦为陪睡工具:揭秘黑茶高端骗局,入局者10有9个离婚

38岁老板娘沦为陪睡工具:揭秘黑茶高端骗局,入局者10有9个离婚

云景侃记
2026-02-12 22:21:30
教育部宣布中考重大变革,取消 5:5 分流,升学规则将全面调整?

教育部宣布中考重大变革,取消 5:5 分流,升学规则将全面调整?

今朝牛马
2026-03-26 20:22:18
退休阿姨说:和再婚老伴同居后才明白,男人老了还要找老伴的原因

退休阿姨说:和再婚老伴同居后才明白,男人老了还要找老伴的原因

热心柚子姐姐
2026-03-27 15:18:31
为什么有个漂亮老婆还是想要分 网友讲出自身经历真是一言难尽

为什么有个漂亮老婆还是想要分 网友讲出自身经历真是一言难尽

侃神评故事
2026-03-10 18:50:04
程潇,深V吊带

程潇,深V吊带

小椰的奶奶
2026-03-28 12:12:40
刚刚,特朗普被打脸!

刚刚,特朗普被打脸!

新浪财经
2026-03-28 03:53:56
调查发现:若50岁前没患这4种疾病,以后患癌的几率或微乎其微?

调查发现:若50岁前没患这4种疾病,以后患癌的几率或微乎其微?

医学科普汇
2026-03-26 20:55:03
52年岳飞后人找毛主席求安排工作,主席听完沉默片刻,说了句话让他当场愣住

52年岳飞后人找毛主席求安排工作,主席听完沉默片刻,说了句话让他当场愣住

老杉说历史
2026-03-13 23:00:06
英国向全球宣告,中国风力涡轮机“高度危险”,禁止采购中国风电

英国向全球宣告,中国风力涡轮机“高度危险”,禁止采购中国风电

书纪文谭
2026-03-27 17:47:25
巴基斯坦:将就中东局势举行四国外长会议

巴基斯坦:将就中东局势举行四国外长会议

新华社
2026-03-28 09:33:12
泪崩!济南世贸广场惊现悼念张雪峰大屏,网友:这就是人心所向…

泪崩!济南世贸广场惊现悼念张雪峰大屏,网友:这就是人心所向…

火山詩话
2026-03-27 07:41:37
我是北京人,去了一趟大连,不吹不黑,大连比网上评价的还要好!

我是北京人,去了一趟大连,不吹不黑,大连比网上评价的还要好!

看尽落尘花q
2026-03-27 16:22:40
官方出手,狠狠替张雪峰出了口恶气,拿没教养当个性活该被喊封杀

官方出手,狠狠替张雪峰出了口恶气,拿没教养当个性活该被喊封杀

削桐作琴
2026-03-28 13:06:21
李昌钰子女发声:父亲遗愿是不举办公开追思仪式,而是希望外界以传承与分享来纪念他,将其精神延续至下一代

李昌钰子女发声:父亲遗愿是不举办公开追思仪式,而是希望外界以传承与分享来纪念他,将其精神延续至下一代

潇湘晨报
2026-03-28 11:57:10
樊振东独取2分状态神勇!挥手告别球迷显情商 新GM:他是时代榜样

樊振东独取2分状态神勇!挥手告别球迷显情商 新GM:他是时代榜样

颜小白的篮球梦
2026-03-28 12:08:20
张雪峰追悼会:遗像被鲜花包裹,员工穿黑衣,女儿和奶奶让人心疼

张雪峰追悼会:遗像被鲜花包裹,员工穿黑衣,女儿和奶奶让人心疼

天天热点见闻
2026-03-28 04:38:31
啥情况!上海一高端楼盘,8折出仓大甩卖!!

啥情况!上海一高端楼盘,8折出仓大甩卖!!

新浪财经
2026-03-28 09:53:04
你见过最无用的节俭行为是什么?看完网友分享:CPU都干烧了!

你见过最无用的节俭行为是什么?看完网友分享:CPU都干烧了!

夜深爱杂谈
2026-02-03 21:51:33
2026-03-28 15:43:00
闪存猎手
闪存猎手
全网蹲好价的野生捕手,算力与羊毛都不可辜负。
353文章数 0关注度
往期回顾 全部

科技要闻

遭中国学界"拉黑"后,这家AI顶会低头道歉

头条要闻

特朗普:北约没支持美打击伊朗 美国以后也不会帮北约

头条要闻

特朗普:北约没支持美打击伊朗 美国以后也不会帮北约

体育要闻

“我是全家最差劲的运动员”

娱乐要闻

王一博改名上热搜!个人时代正式开启!

财经要闻

我在小吃培训机构学习“科技与狠活”

汽车要闻

置换补贴价4.28万起 第五代宏光MINIEV正式上市

态度原创

时尚
本地
房产
艺术
军事航空

龙虾来了,厌蠢症炸了

本地新闻

在潍坊待了三天,没遇到一个“潍坊人”

房产要闻

6.8万方!天河员村再征地,金融城西区开发全面提速

艺术要闻

细腻优雅的花卉静物画 | Henrietta Smith

军事要闻

美军中东基地损失最新披露

无障碍浏览 进入关怀版