这个秒杀一人一单怎么样,Ai加个人总结的。想用于面试吟唱

#牛客AI配图神器#但是被发现没有完整实现怎么办?大家 帮我看看。实现秒杀以及一人一单的策略:

1:Redis层面的分布式锁
首先将分布式锁的粒度降低,将用户Id与商品Id进行绑定,借助LUA脚本(原子性),先判断是否存在购买标识(幂等性1),没买过就去尝试获取分布式锁,获取成功之后
然后再次判断是否存在购买标识,再判断库存是否足够,最后再扣减库存,两次判断减少锁竞争的消耗

2:数据库层面的数据修改
第一种:开启事务,对数据库的数据进行修改,扣减库存以及添加用户的购买记录,然后在Redis中添加唯一标识
可以借助Set进行存储,也可以借助string进行存储。
string结构可以实现更加精准的存储,可以存储相关的任务状态,比如已完成,未完成,完成中,同时还可以对过期时间进行单独指定,但是呢,当海量数据下会造成高频的内存碎片,与集群跨槽访问开销
Set结构可以以更加高效的查询效率去实现检索判断,约为string的30%,但是呢,无法存储任务状态,存在大Key问题,以及对过期时间只能全局Set的设定无法单个元素的设定。

第二种:RabbitMQ提高并发能力(幂等性,可靠性的保证)
如果说需要想提高并发能力,可以借助RabbitMQ去异步将数据同步数据库,只在Redis去执行业务的决策,此时RabbitMQ当中只是去对数据进行修改,可以保证最终的一致性,无法保证全局的一致性。
1 保证幂等性2,将用户id与商品id创建唯一索引或者唯一约束,避免重复消费添加,添加失败导致事务回退
2 保证幂等性3,创建全局唯一Id,可以在Redis业务决策结束后生成,后续与用户id商品id一起传入RabbitMQ,当消息被消费者正常消费后,将唯一id存储到Set当中,消费者消费前对判断Set当中是否存在这个唯一标识id,存在代表以及消费过不存在则未消费过或者将这唯一id借助string类型进行存储,消费者消费前判断string是否可以获取成功,成功则代表已经消费过,不成功则未消费

3:定时任务进行校验
最后还可以借助xxl-job对Redis数据与数据库数据进行校验

改进:
1 Redis 持久化与高可用: 需要配置 RDB+AOF 和 Redis Sentinel/Cluster 防止数据丢失和服务中断。
2 冷启动/预热: 秒杀开始前,需要将商品库存和必要信息加载到 Redis。#我的AI电子员工##你最近一次加班是什么时候?##牛客创作赏金赛#
全部评论
接好运
点赞 回复 分享
发布于 08-13 21:41 安徽

相关推荐

1.自我介绍2.大三有专业课怎么办(拿到offer可以请假)3.两篇软件著作权是哪两个项目(我说的是科研管理系统和微途旅行)4.简历里没有写科研管理系统这个项目(解释:主要是表现我个人有过项目合作经历)5.这个单点登录怎么做的?6.你们科研系统的用户是怎么得到统一的用户?7.你们科研系统的审核是使用的工作流吗8.这个项目在技术框架上没有比较突出的点,所以没有写到简历里(解释了下这个项目,主要是业务方面的难度,更多是作为一个与他人合作的项目经历)9.在这个项目当中,你主要作为一个什么样的角色.10.项目团队是学校的兴趣组或者实验室吗11.介绍一下云智颐养项目(阿巴阿巴阿巴)12.云智颐养是一个什么性质的项目,项目团队成员配置,承担什么角色13.工作流是教程里就有的,还是自己增加的14.工作流的源码是否有研究过(没研究过,直接拉的代码)15.springai框架functioncalling用的是哪个模型16.functioncalling与mcp server的区别(不知道,只知道mcp是协议)17.了不了解functioncalling有什么限制18.xxl-job是怎样调度使用的,用在什么场景?19.xxl-job有哪些策略20.限制xxl-job秒级任务的性能的在哪里21.还有什么其他的项目可以介绍的?(介绍的微途旅行)22.这个项目的需求是竞赛规定的还是自己想出来的23.前端是用ai工具做的,貌似ai其实有些样式不是很好调,那你这边是会前端吗24.为什么第二个项目用的springai,这个用的lanhchain4j,有什么区别,你觉得在使用上你更喜欢哪个,为什么更喜欢langchain4j25.为什么使用了redis和lua脚本已经判断下单校验了,后面数据库校验还要加乐观锁26.秒杀门票时,门票数量有变更时怎么做到27.秒杀有没有考虑过有用户下单了,但是没有支付成功或者没支付,怎么处理这个redis里库存已经扣减的情况28.秒杀过程中有人点击速度很快,怎样防止用户重复提交购买29.如果合适的话什么时候可以到岗,大三大四只有期末或者毕业设计会回去是吧?反问:1.公司是自研,低代码还是二开(公司自研的低代码平台,说比若依更强一些,简单的业务用框架完成,大部分稍微复杂的业务还是用自己写代码实现)2.公司的业务是承接外面的还是有自己的(一般是承接地铁和农产品行业相关的)3.公司的开发项目组人员配置(看项目类型和大小,一般是1比1,每个项目有一个测试,大的项目有十几个人,大部分项目是4,5,6个人)
查看28道真题和解析
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

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