体育场预定-下单-扣减库存一致性

流程

1:通过库存服务缓存(缓存里面不仅有位图存储该时间点id的位置信息还有库存信息)的Redis获取令牌

2:拿着令牌向订单服务同步下单

        如果有令牌就执行下面的Redis,如果没有就直接返回

        扣减Redis库存缓存

                扣减成功:继续

                扣减失败:返回

                        前端重试整套流程

3:1锁2查3更新生成订单、本地消息表、发送消息给订单服务扣减库存,结果返回

1. 令牌机制 + Redis 缓存前置拦截(合理)

  • 令牌本质是 “下单资格凭证”,通过库存服务的 Redis 缓存发放(结合位图可快速校验座位 / 时间点的可用性),能在高并发时快速拦截无资格请求(如已售罄场次),减少下游订单服务的压力。
  • 位图存储位置信息(如座位是否被占用)设计巧妙:位图的位运算(如GETBIT判断单个座位状态,BITCOUNT统计剩余座位)高效且节省空间,适合体育场这类 “多位置单元” 的库存场景。

2. Redis 缓存扣减前置 + 失败重试(适配高并发)

  • 步骤 2 先扣减 Redis 缓存,成功后再进入订单生成流程,本质是用 Redis 的高性能做 “第一道库存锁定”,避免大量无效请求打到数据库,符合高并发场景的 “缓存优先” 原则。
  • 扣减失败让前端重试整套流程,能应对瞬时并发冲突(如多个请求同时抢最后一个库存),通过重试提高成功率,逻辑合理。

3. “锁 - 查 - 更”+ 本地消息表(保证一致性)

  • 步骤 3 的 “1 锁 2 查 3 更新” 是数据库操作的标准防超卖逻辑:加锁避免并发修改,查实际库存做二次校验,更新订单和库存,确保数据库层面的数据准确性。
  • 本地消息表 + 消息发送的设计,能保证 “订单生成” 与 “库存最终扣减” 的最终一致性(即使消息发送失败,可通过定时任务重试),解决分布式事务问题。

本地消息表解决分布式事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】王道考研笔记整理(3)数据链路层

目录 第三章 数据链路层 3.1 数据链路层的功能 3.2 组帧 3.2.1 字符计数法 3.2.2 字节填充法 3.2.3 零比特填充法 3.2.4 违规编码法 3.3 差错控制 3.3.1 奇偶校验码 3.3.2 CRC 校验码 3.3.3 海明校验码 3.4 可靠传输与流量控制 3.4.1 滑动窗口机制 3.4.2 停止 - 等待…

【后端】java 抽象类和接口的介绍和区别

文章目录一、抽象类(Abstract Class)二、接口(Interface)三、核心区别总结四、使用场景对比五、从设计思想理解最佳实践在Java中,抽象类(Abstract Class)和接口(Interface&#xff0…

Apache OFBiz Scrum 组件命令注入漏洞

【严重】Apache OFBiz Scrum 组件命令注入漏洞 漏洞描述 Apache OFBiz 是一款知名的开源企业资源规划(ERP)解决方案,它提供了一整套开箱即用的企业级应用。Scrum 是 OFBiz 的一个插件,旨在为敏捷开发团队提供项目管理功能,其中包括与 SVN 版…

FastAPI入门:多个文件、后台任务、元数据和文档 URL

更大的应用 - 多个文件 假设文件结构如下:. ├── app # 「app」是一个 Python 包 │ ├── __init__.py # 这个文件使「app」成为一个 Python 包 │ ├── main.py # 「main」模块,例如 import app.main │ ├…

一个示例mcp agent功能的交互式框架

https://github.com/whym3/Deepseek_MCPDeepseek_MCP https://github.com/whym3/Deepseek_MCP Deepseek_MCP是一个演示mcp agent的框架,基于Flask开发,支持在浏览器采用交互方式与deepseek及agent对话。需要注册外部Deepseek api,不支持本地…

nodejs 基础知识-2

模块的暴露和导入 编写date.js module.exports.echo 导出的名称 module.exports.echo function echo(){ return Date.now(); } 编写 index.js const echoDate require(‘./date.js’) 在index引入 console.log(echoDate.echo()); //调用 开发一个自定义模块 exports.forma…

递归推理树(RR-Tree)系统:构建认知推理的骨架结构

探索基于三维评估的动态推理系统如何实现智能决策与知识演化引言 在复杂问题求解领域(如战略决策或科学探索),人类思维的递归本质为AI系统设计提供了重要启发。我设计并实现的递归推理树(Recursive Reasoning Tree, RR-Tree&#…

《动手学深度学习》读书笔记—9.5机器翻译与数据集

本文记录了自己在阅读《动手学深度学习》时的一些思考,仅用来作为作者本人的学习笔记,不存在商业用途。 语言模型是自然语言处理的关键, 而机器翻译是语言模型最成功的基准测试。 因为机器翻译正是将输入序列转换成输出序列的 序列转换模型&a…

Mysql进行操作时锁的具体行为

场景一:单个事务更新一条存在的数据 假设有表 user (id PK, name, age),数据:[id1, nameAlice, age25] 你的 SQL: UPDATE user SET age 26 WHERE id 1; 底层动作: 事务 A (主动方) 发起更新请求。Lock Manager 介入&…

人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报

IMYAI 平台 2025 年 7 月重要功能更新与优化汇总 2025年07月31日更新 细节优化: 修复了移动端提交后自动弹出侧边栏的BUG。优化对话高级配置界面,增加滚动条并固定高度,避免内容超出屏幕。音乐生成界面的人声选择新增“合唱”选项&#xff…

HTTP 与 HTTPS 的区别深度解析:从原理到实践

HTTP 和 HTTPS 是现代 Web 开发中不可或缺的协议,它们决定了浏览器与服务器之间数据传输的方式。HTTPS 作为 HTTP 的安全版本,在安全性、性能和用户体验上都有显著提升。本文将通过万字篇幅,结合图表和代码示例,详细剖析 HTTP 与 …

STM32F407VET6学习笔记11:smallmodbus_(多从机)创建新的slave从机

今日记录一些smallmodbus 创建新的slave 从机 的过程,以及使用的关键点. 目录 创建新的从机对应操作函数与buffer 创建新的从机线程与操作代码: slave使用的要点: 完整的slave代码: 能正常通信: 创建新的从机对应操作函…

【论文阅读】Transformer Feed-Forward Layers Are Key-Value Memories

Transformer Feed-Forward Layers Are Key-Value Memories 原文摘要 研究背景与问题: 前馈层占Transformer模型参数总量的2/3,但其功能机制尚未得到充分研究 核心发现:提出前馈层实质上是键值存储系统 键:这里的键与训练数据中出…

昇思+昇腾开发板:DeepSeek-R1-Distill-Qwen-1.5B 模型推理部署与 JIT 优化实践

目录 引言 模型推理部署 环境准备 安装 MindSpore 查看当前 mindspore 版本 安装 MindNLP 模型与分词器加载 导入必要的库 加载分词器 加载模型 对话功能实现 设置系统提示词 构建对话历史输入 推理函数实现 交互界面实现 推理JIT优化 基础环境安装 JIT 优化配置…

用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时

1.地址:https://pecl.php.net/package/redis/6.2.0/windows 2.下载3.解压后复制php_redis.dll到phpstudy_pro\Extensions\php\php8.2.9nts\ext目录 4.打开php.ini,加上 extension_dir “D:\software\phpstudy_pro\Extensions\php\php8.2.9nts\ext”

开源列式分布式数据库clickhouse

这里写自定义目录标题开源列式OLAP数据库clickhouseclickhouse使用 ClickHouse 的场景如何理解行式存储和列式存储clickhouse-go开源列式OLAP数据库clickhouse OLAP (分析型):专为快速扫描、聚合、分析海量数据设计。OLTP (事务型):专为处理大量短事务&…

Java Stream API 详解(Java 8+)

1. Stream 操作分类Stream 操作分为两类:中间操作(Intermediate Operations)返回新的 Stream,可以链式调用(如 filter, map, sorted, distinct)。惰性求值:只有遇到终止操作时才会执行。终止操作…

「源力觉醒 创作者计划」_文心大模型4.5系列开源模型, 从一行代码到一个生态:聊聊开源战略那些事儿,顺便扯扯文心大模型 4.5 的使用心得

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录从一行…

算法专题(二)回文链表

1、源代码class Solution {public boolean isPalindrome(ListNode head) {ListNode fasthead,slowhead; //快慢指针都在头结点//快指针走2步,慢指针走一步。//双数快指针最后是null,单数快指针下一位是nullwhile(fast!null && fast.next!null){f…

2025《艾诺提亚失落之歌》逆向工程解包尝试

前言 想开发一下光明之魂,看能不能解包《艾诺提亚失落之歌》的模型。 之前写了(https://blog.csdn.net/weixin_42875245/article/details/148616547?spm1001.2014.3001.5501) 沿用这个思路进行逆向工程解包。 文章目录请添加图片描述前言…