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

秒杀任务中,在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 江苏

相关推荐

算法:LC3. 无重复字符的最长子串(mid,ACM模式,自己写输入输出,直接秒)无项目拷打,只让讲了项目中缓存穿透、缓存击穿、缓存一致性的解决方案。大多时间拷打八股,主要是Mysql、Redis和Kafka(项目中有用到),还有计算机网络。Mysql和Redis考得很深,问了一些工程问题的解决方案没答得很好,最后面试官说知识的广度挺好、深度有欠缺1. SQL事务题,这两个事务同时执行,说明它们的执行流程,失败还是成功-- 表 t 有主键 id,值为 1, 3, 5, 10, 15, 20-- 事务 ASELECT * FROM t WHERE id = 7 FOR UPDATE;-- 事务 BINSERT INTO t VALUES (6, ...);INSERT INTO t VALUES (8, ...);INSERT INTO t VALUES (11, ...);2. Mysql的事务是什么?有哪些特性?3. Mysql的原子性底层如何实现?(undo log)4. 讲一下Mysql的MVCC机制的实现原理(readview、undo log、隐藏字段)5. Mysql的覆盖索引、前缀索引、索引下推分别是什么?6. 如何定位和优化慢SQL语句?(慢查询日志、explain关键字)7. 使用explain分析慢SQL语句时,哪些字段比较重要?8. Mysql的主从复制的数据同步流程是怎样的?(binlog、offset)9. 介绍下Redis的常用数据类型10. 讲一下你项目中如何解决缓存穿透、缓存击穿和缓存一致性问题?11. 如何使用kafka解决消息丢失问题?12. 如何使用kafka防止消息的重复消费问题?13. kafka发送消息时,如果因为网络问题出现消息丢失,如何解决?14. 从浏览器输入百度的网址访问网页的网络过程是怎样的?15. HTTP和HTTPS的区别是什么?
查看15道真题和解析
点赞 评论 收藏
分享
评论
8
86
分享

创作者周榜

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