上一篇
场景引入:
“小张,咱们的秒杀活动库存扣减怎么又卡住了?” 深夜的办公室里,运维同事盯着监控大屏一脸崩溃,Redis的DECR
命令默默举起了小手:“试试我?一行代码搞定原子性扣减!”
在电商库存、点赞计数、限流控制等场景中,数据高频变更和原子性是刚需,传统方案(如SQL的UPDATE...SET count=count-1
)存在两大痛点:
而Redis的整数自减操作DECR
/DECRBY
天生解决这些问题!
DECR
DECR stock_iphone15 # 将键stock_iphone15的值减1(自动处理字符串转整数)
✅ 适用场景:简单计数器(如文章阅读量统计)
DECRBY
DECRBY user_credits 10 # 用户积分一次性扣减10
✅ 适用场景:批量扣减(如积分兑换商品时)
Redis的整数范围是64位有符号数,但业务中常需避免负数:
EVAL "if redis.call('GET', KEYS[1]) >= ARGV[1] then return redis.call('DECRBY', KEYS[1], ARGV[1]) else return -1 end" 1 inventory 5
📌 脚本解释:Lua脚本保证原子性,仅当库存≥5时才执行扣减
操作方式 | QPS(万次/秒) | 原子性 |
---|---|---|
MySQL UPDATE | 8 | |
Redis DECR | 4 |
DECR
会返回(error) ERR value is not an integer
SET login_status "true" DECR login_status # 报错!
EXPIRE
续期 通过Redis Streams实现库存变更实时通知:
# 扣减库存后发布事件 MULTI DECRBY flash_sale_stock 1 XADD stock_events * product_id "p10086" action "decrement" EXEC
Redis的自减操作如同编程界的“减法快捷键”:
下次当你需要处理“越来越少”的数据时,不妨对Redis说一句:“DECR,拜托啦!” ✨
(本文基于Redis 7.2+版本特性,2025年7月验证通过)
本文由 袁碧玉 于2025-07-31发表在【云服务器提供商】,文中图片由(袁碧玉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/491002.html
发表评论