如何保证秒杀业务的事务性?

秒杀任务中,在redis中判断秒杀资格,生成订单;订单异步写入数据库。
怎么保证整个流程的事务性呢? 比如订单写入数据库失败,怎么通知redis恢复缓存中扣除的库存。
当通知redis恢复库存的消息,由于网络等原因,redis收不到怎么办?
全部评论
个人看法。 秒杀是很快的动作,基本要求快速返回,所以当写入数据库失败时,其实这时生产者端早已处理完缓存发送消息返回了,缓存回流也没效果,除非你做那种后续发送信息通知用户秒杀失败,不过这种体验很差。 考虑保证订单写入数据库这个操作的完成比较好,而不是在缓存恢复上做文章。要保证订单写入数据库这个操作的话其实就是如何做到消息不丢失,这个网上很多方案。
3 回复 分享
发布于 2024-05-03 22:42 广东
首先保证不超卖,然后就是既然他都抢到了,就不应该恢复库存吧,订单写入数据库失败是消息队列的可靠性问题
1 回复 分享
发布于 2024-05-31 22:48 陕西
m
1 回复 分享
发布于 2024-05-08 21:02 湖北
保证不超卖就行,这些不管了
1 回复 分享
发布于 2024-05-02 17:21 湖南
m
点赞 回复 分享
发布于 2024-05-19 11:58 陕西
佬,这是黑马点评吗?
点赞 回复 分享
发布于 2024-05-01 11:57 湖北
m
点赞 回复 分享
发布于 2024-05-01 11:51 辽宁
m
点赞 回复 分享
发布于 2024-04-29 14:19 广东
N
点赞 回复 分享
发布于 2024-04-29 13:28 山东
m
点赞 回复 分享
发布于 2024-04-29 13:26 辽宁
m
点赞 回复 分享
发布于 2024-04-29 13:05 江苏

相关推荐

2025-11-17 01:10
门头沟学院 Java
1.项目介绍2.看你做过支付,你怎么确保账单和资金流水对得上?具体怎么设计对账系统3.jvm知道吧,对象在堆上分配内存时,MarkWord里都存了哪些标志位?为什么在偏向锁状态下对象头会变化4. 那如果一个对象正在偏向锁状态,被别的线程抢了,会经历哪些锁升级过程?5. 你能画出从偏向锁 → 轻量级锁 → 重量级锁这整个过程的结构图吗?每一步触发条件是什么6.GC时stw到底是谁发起的7. 你知道SafePoint吗?为什么线程必须在SafePoint 才能安全停下8.你觉得对象分配为什么需要TLAB9.如果我告诉你一个接口平均延迟是30ms,但99分位延迟是900ms,你能从GC的角度分析可能的原因吗13.MySQL熟悉么,如果两个事务,一个更新,一个查询,说一下它们在 RC和 RR下的可见性14.说一下MySQL事务的隔离级别有哪些15. 你在项目里用 Redis 的 zset 做延时任务,那我问你:如果Redis挂了,你的任务是不是全没了?怎么做容灾16.如果Redis 里的延时任务量非常大(上百万),你每次都扫一遍?17.你提到用LRU淘汰策略,那你知道 Redis 的 LRU 是精确的吗18. 看你项目里有用分布式锁,你知道Redisson的Watchdog是怎么续期的?19.如果 Redis 掉线了,锁自动失效了,任务没执行完,怎么办20.redisson分布式锁是不是绝对安全的?它可能出什么问题?21. 我现在有一段多线程的代码,我要去一个主线程去启动3个子线程去执行100个任务,由这个子线程去执行100个任务,然后我主线程它是肯定是要等这100个任务执行完它才会继续往下面走,你要怎么去实现这个逻辑22. 假如有一个接口,里面有ab两个方法,这个接口有两个实现类,那么这个时候我a方法是做一种逻辑,b方法可能做多种业务逻辑,怎么样才能让这种情况更解耦22.手撕:给一个链表,求出每个节点后面下一个大于它的值,如果没有则为0(要求:时间复杂度O(n);不能翻转链表23. 那如果是求每个节点后面最大的值呢?
点赞 评论 收藏
分享
2025-11-12 14:24
河南大学 Java
1.自我介绍2.Java,SpringBoot是自己学的吗。3.SpringBoot主要解决什么问题?你觉得一个完整的(这里没听清不知道说的啥)框架类似于SpringBoot应该包含哪些内容4.雪花算法是怎么保证不重复的,雪花算法一定不重复吗?5.分布式唯一ID除了雪花算法还有别的方式吗?6.Token是JWT还是什么?这个Token是怎么防止订单重复提交的?怎么保证原子性?7.下单的流程,半消息是什么意思?(感觉面试官没听过事务消息?)8.订单状态机是什么?9.定时任务扫表关单,如果数据量很大一次扫不完怎么办?(分片任务)如果某一个分片挂了怎么办?(下次再扫)还有更优雅的方式吗?(被动关单避免延迟的影响)那如果这个时候来统计订单的情况不就不准了吗?(这里没懂什么意思)10.分布式锁怎么简化的?(AOP切面)11.有看过分布式的一些概念吗?(CAP,BASE理论,分布式事务)有看过Google的**算法吗?(这里不知道说的啥算法,没听过)12.Reids是CP的系统还是AP的系统?(AP)如果说我上层的系统要保证一致性呢?(RedLock或者Zookeeper)项目中有用过Zookeeeper吗?那如果说我用Zookeeper现在要等Zookeeper去投票选举Leader,但是我是一个高并发的系统等不了他投票怎么办?(还是CAP的抉择吧,你不能既要又要)13.你觉得RocketMQ他算是一个CP还是AP的系统?(这个还真不知道)Kafka了解吗?Kafaka新版本把Zookeeper去除了,改用了Raft算法你知道为什么吗?(不知道)14.MySQL的主键有什么作用?聚簇索引和非聚簇索引的区别(聚簇索引叶子存储数据,非聚簇索引,不管是二级索引还是MyISAM的索引都是存储的数据的位置,检索数据多一次IO)15.Nacos这样的框架他主要解决的是什么问题?(服务注册与发现,配置中心)每个服务都直接去发请求不行吗?为什么要有服务中心(每个节点要保存所有节点的信息)Nacos挂了怎么回退?16.除了Java后端还了解过别的方向吗?17.LangChain4J这种框架主要帮我们解决了什么问题?18.反问尽管是小厂,感觉面试官问的东西还是很有深度的,面试官说公司刚融到资,团队都是一线大厂出来的人
查看17道真题和解析
点赞 评论 收藏
分享
2025-11-13 19:50
北京邮电大学 Java
纯八股,不知道这样的面试有啥意思,20人的小厂,说的口干舌燥最后还给我挂了hashmap1.7和1.8的区别树化时机,退化时机锁升级流程ThreadLocal使用场景,可能的问题ReentrantLock和synchronized的区别JVM内存结构方法区1.7和1.8的区别堆的划分设置老年代和新生代比例的命令(-XX:NewRatio=N,默认为2)设置Eden区和单个Survivor区比例的命令(-XX:SurvivorRatio=N,默认为8)有哪些垃圾回收算法JAVA8默认的GC:如果是服务端则使用Parallel GC,即新生代和老年代分别使用Parallel Scavenge和Parallel Old;如果是客户端则使用Serial,即新生代和老年代分别使用Serial和Serial OldJAVA9默认的GC变更为G1一直到最新版CMS在JAVA9标记为废弃,14彻底移除索引为什么用B+树慢sql优化MVCC原理有哪些隔离级别可重复读怎么实现的mysql有哪些锁,什么场景会加锁使用redis的场景缓存和数据一致性三种消息队列的区别kafka为什么吞吐量大rabbitmq支持事务消息吗Eureka和Nacos区别配置中心的使用场景redis的数据类型 使用场景zset的数据结构 跳表的原理消息队列的重复消费 消息堆积 消息可靠性linux常用命令找一个日志最新的500行远程调用的原理用过spring cloud哪些组件springboot和spring的区别为什么springboot引入个依赖就可以内置个服务器直接启动了自动装配原理mysql:查找一个月内下单次数最多的前10个用户一个单体项目拆分到微服务怎么拆concurrenthashmap原理,使用场景雪花算法时间钟摆问题聚集索引和非聚集索引的区别最左前缀匹配场景题索引下推是什么
点赞 评论 收藏
分享
评论
8
86
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务