news 2026/4/15 2:11:42

Redis如何利用Lua实现秒杀资格与库存的双重校验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis如何利用Lua实现秒杀资格与库存的双重校验

必须用Lua脚本而非客户端分步判断,因GET+DECR在并发下必然超卖;Lua在Redis端原子执行“读-判-改”,避免中间插队导致库存为负或资格校验失效。为什么必须用 Lua 而不是客户端分步判断因为秒杀场景下,GET 库存再 DECR 的两步操作在并发时必然出现超卖——中间可能有其他请求插队。Lua 脚本在 Redis 服务端原子执行,整个“读-判-改”过程不会被中断。常见错误现象:(integer) -1 出现在库存字段里,或日志里反复看到“资格已用完”但用户实际没抢到——本质是业务层校验和 Redis 操作没对齐。不要在客户端做 if inventory > 0 then DECR:网络延迟 + 多实例部署会让这个判断彻底失效脚本里别用 redis.call("GET", ...) 再手动转数字:直接用 tonumber(ARGV[1]) 更安全,避免字符串比较陷阱如果用 EVALSHA 预加载脚本,记得先 SCRIPT LOAD,否则返回 NULL 导致逻辑跳过一个能同时校验用户资格和库存的 Lua 脚本怎么写核心思路:把用户资格(比如是否在白名单、是否已抢过)和库存扣减放在同一个脚本里,用 redis.call 统一查、统一改,返回值明确区分成功/失败原因。示例脚本(精简版):if redis.call("SISMEMBER", "whitelist", KEYS[1]) == 0 then return {0, "not_in_whitelist"}endif redis.call("SISMEMBER", "seckilled", KEYS[1]) == 1 then return {0, "already_seckilled"}endlocal stock = tonumber(redis.call("GET", KEYS[2]))if stock <= 0 then return {0, "out_of_stock"}endredis.call("DECR", KEYS[2])redis.call("SADD", "seckilled", KEYS[1])return {1, stock - 1}说明:KEYS[1] 是用户 ID,KEYS[2] 是商品库存 key;返回数组第一个元素是结果码,第二个是附带信息。用 SISMEMBER 查白名单比 EXISTS + 字符串匹配更高效,也避免误匹配资格和库存检查顺序不能颠倒:先确认人有资格,再动库存,否则可能卡住有效用户别在脚本里用 redis.log:生产环境默认关闭日志,且影响性能Java 客户端调用时容易漏掉的关键点Spring Data Redis 的 execute() 方法传参稍不注意就会错位,导致脚本收到空 KEYS 或乱序 ARGV。 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 2:08:30

bge-large-zh-v1.5开源模型实践:符合信创要求的国产AI基础设施部署

bge-large-zh-v1.5开源模型实践&#xff1a;符合信创要求的国产AI基础设施部署 如果你正在寻找一个性能强劲、完全开源且符合信创要求的文本向量化模型&#xff0c;那么bge-large-zh-v1.5绝对值得你深入了解。今天&#xff0c;我们就来聊聊如何快速部署和使用这个优秀的国产嵌…

作者头像 李华
网站建设 2026/4/15 2:05:09

算法打卡第2天|删除元素

学习视频&#xff1a;https://www.bilibili.com/video/BV12A4y1Z7LP 题目解答:https://leetcode-cn.com/problems/remove-element/ 思路(暴力解法): 1. 新建一个空数组 2. 遍历原数组&#xff0c;把不等于 val 的元素都放进新数组 3. 把新数组的元素复制回原数组&#xff…

作者头像 李华
网站建设 2026/4/15 2:01:35

程序设计入门——C语言

Q&#xff1a;我需要特殊版本的计算机吗&#xff1f; A&#xff1a;任何计算机都可以用于C语言编程&#xff0c;包括但不限于各个版本的MS Windows、各个版本的Mac OS X、各种发行版本的Linux。有的手机有app也能实现C语言编程&#xff0c;不过我们不推荐那么小的屏幕。 Q&…

作者头像 李华
网站建设 2026/4/15 2:00:38

2026年中高考将至!揭秘好用的提分技巧,这家权威机构不容错过!

2026年中高考的脚步越来越近&#xff0c;对于广大考生和家长来说&#xff0c;如何有效提分成为了最为关注的话题。在众多提升成绩的途径中&#xff0c;选对学习方法和辅助工具至关重要。今天&#xff0c;就为大家揭秘一些实用的提分技巧&#xff0c;同时为大家推荐一家权威机构…

作者头像 李华
网站建设 2026/4/15 2:00:16

031.YOLOv5推理脚本详解:detect.py每一行代码的作用

上周排查一个线上问题,模型在测试集上精度正常,部署到产线却频繁漏检。折腾半天发现是推理脚本里一个不起眼的预处理参数被改动了——这让我意识到,很多人把detect.py当作黑盒调用,却不知细节里的魔鬼足以让整个项目翻车。今天咱们就逐行拆解这个最常用的推理脚本,把那些容…

作者头像 李华
网站建设 2026/4/15 1:58:09

光影的艺术:从入门到电影级宣传片的布光与器材全解析

在视频制作的领域里&#xff0c;画面质感往往决定了观众对内容的留存率。而决定画面质感的两个核心支柱&#xff0c;便是“光”与“器”。无论是企业宣传片、品牌形象片&#xff0c;还是大型会议记录&#xff0c;不同的预算级别对应着截然不同的布光逻辑与器材选择。本文将深入…

作者头像 李华