B站秒杀项目学习心得

项目地址:B站大学
特别鸣谢:某大佬博客

在该项目中核心就是秒杀的实现:大量用户进行秒杀订单时不能超卖、同一用户不能重复抢

不能超卖在doSeckill1中通过update的排他性实现(乐观锁)。

        //拿到秒殺商品TSeckillGoods seckillGoods = itSeckillGoodsService.getOne(new QueryWrapper<TSeckillGoods>().eq("goods_id", goodsVo.getId()));seckillGoods.setStockCount(seckillGoods.getStockCount() - 1);//id没问题同时库存>0才更新boolean seckillGoodsResult = itSeckillGoodsService.update(new UpdateWrapper<TSeckillGoods>().setSql("stock_count = " + "stock_count-1").eq("goods_id", goodsVo.getId()).gt("stock_count", 0));

而在doSeckill2中通过redis预减库存(redis的原子性实现)

        //通过Redis预减库存ValueOperations valueOperations = redisTemplate.opsForValue();TSeckillOrder seckillOrder =(TSeckillOrder) redisTemplate.opsForValue().get("order:"+user.getId()+":"+goodsId);if(seckillOrder != null) return RespBean.error(RespBeanEnum.REPEATE_ERROR);Long stock = valueOperations.decrement("seckillGoods:"+goodsId);if(stock < 0){valueOperations.increment("seckillGoods:"+goodsId);return RespBean.error(RespBeanEnum.EMPTY_STOCK);}
//        通过RabbitMQ消息队列下单return  RespBean.success(order);
  • 不能重复抢通过唯一索引实现:即将商品id和用户id进行绑定构成唯一索引
  • 压测可以把用户加少点商品多一点就可以复现重复购买
  • 优化主要是把数据库的重复访问,能放到redis就放到redis

前人之述备矣,我想说一下做这个项目的心得:

坚持自己实现一遍,看再多次也只是看,一定要写代码,你会发现就算有视频,有参考,还是会有很多bug,半天的项目视频,我前后花了4天才完全实现,这里还不能说全都明白。
但是收获巨大,对很多只停留于脑海的知识点有更深的理解,如访问Redis确实比访问数据库快;在高并发场景下如何保证数据一致性(唯一性索引,乐观锁,原子性操作)等等。
同时也遇到了很多bug,例如设置cookie时会出现同名cookie第一个值为null导致后端取不到数据;因为单词大小写导致无法接受到请求;数据库部分用户信息不全导致无法添加报空指针异常。。。
希望自己能多动手,多思考,加油!

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

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

相关文章

华尔街幽灵的规则

华尔街幽灵规则解析 规则一:永远不要持仓待涨&#xff0c;不要等市场提醒你出错才清除掉错误仓位。 这条规则其实也就是不要通过止损出场&#xff0c;等到触发止损出场&#xff0c;那么很可能已经造成一些亏损&#xff0c;长此以往&#xff0c;亏损会不断累积&#xff0c;伤到根…

selenium入门篇(环境搭建、八大定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型 …

本地Mysql开启远程访问(图文)

目录 1. 问题所示2. 原理分析3. 解决方法 1. 问题所示 事因是访问同事的数据库时&#xff0c;出现无法访问 出现1130 - Host ‘IT07’ is not allowed to connect to this MySQL server截图如下&#xff1a; 2. 原理分析 如果账号密码地址都正常的情况下&#xff0c;这是没开…

从 Apache Doris 到 SelectDB Cloud:云原生架构下的弹性能力揭秘

随着云时代的到来&#xff0c;越来越多企业开始在公有云、私有云乃至 K8s 容器平台构建实时数据平台。云计算基础设施的革新&#xff0c;促使着数据仓库朝着云原生的方向发展。而用户日益复杂的业务负载和降本增效的需求&#xff0c;对于系统资源的精细化管理和成本效益等方面提…

笔记:oracle报错ORA-55941

说明 在删除audsys下的表时报错 ORA-55941: 不允许对表 "AUDSYS"."CLI_SWP$233f2a8a$1$1" 执行 DML 和 DDL 操作解决方案 扩展 定期PURGE部分AUD$ 第一步针对AUDIT_TRAIL_AUD_STD设置init_cleanup每24小时执行一次. BEGIN IF NOT DBMS_AUDIT_MGMT.IS_…

IDEA 编码规约扫描 Code inspection did not find anything to report.

IDEA安装了Alibaba Java Coding Guidelines插件&#xff0c;却看不到规约检查结果。手动进行编码规约扫描&#xff0c;弹窗提示“Code inspection did not find anything to report.”&#xff1a; 这种情况是因为代码文件所在的目录被标记成了测试文件&#xff08;Test Source…

IT運維國産化替代:挑戰與機遇並存

隨著信創國産化浪潮的持續推進&#xff0c;IT運維&#xff08;ITOM&#xff09;作為信息化體系中的關鍵環節&#xff0c;其國産化替代的重要性日益凸顯。面對日益複雜的國內外信息技術環境&#xff0c;以及企業數字化進程的快速發展&#xff0c;企事業單位在IT運維方面正面臨著…

python3GUI--PyQt5打包心得(三)NIS Edit制作安装程序(详细图文演示)

文章目录 一&#xff0e;前言二&#xff0e;介绍三&#xff0e;下载、安装1.下载2.安装 四&#xff0e;制作安装程序四&#xff0e;验证五&#xff0e;总结 一&#xff0e;前言 传送门&#xff1a; python3GUI–PyQt5打包心得&#xff08;详细图文演示&#xff09; python3GU…

本地体验最强开源模型Llama3+Qnw(支持Windows和Mac)

一键运行大模型本地软件&#xff08;含模型&#xff09;&#xff1a;点击下载 Meta放出Llama3模型了&#xff0c;也应该是这段时间里的一个科技大新闻了。 Llama一直都是开源大语言模型的领头羊驼。 而Llama3又是所有羊驼中最新的领头羊。 可以简单地来看一下官方的对比数据…

SnapGene Mac v5.3.1中文激活版:综合性分子生物学软件

SnapGene Mac是一款功能全面、操作便捷的综合性分子生物学软件&#xff0c;专为Mac用户打造。它集成了DNA序列编辑、分析、可视化和团队协作等多种功能&#xff0c;为科研人员提供了一个高效、可靠的分子生物学研究工具。 SnapGene Mac v5.3.1中文激活版下载 在SnapGene Mac中&…

idea自定义配置文件的注释

打开 IntelliJ Idea 软件 依次找到 File—>Editor—>File and Code Templates 设置 Files 下的Class、Interface、Enum等 输入下面的内容 /** * description: ${NAME} * date: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} * author: author **/

深度学习比较有用的网站

1.前沿论文学习和效果对比 Browse the State-of-the-Art in Machine Learning | Papers With Code 超简单实用&#xff0c;推荐的深度学习科研必备网站&#xff08;轻松找论文&#xff0c;代码项目&#xff0c;写论文综述&#xff09;| 土堆教程_哔哩哔哩_bilibili 2.前沿模…

机器学习中的K-均值聚类算法及其优缺点

K-均值聚类算法是一种常见的无监督学习算法&#xff0c;用于将数据集划分为K个不同的类别。该算法的目标是最小化数据点与其所属聚类中心之间的平均平方距离。下面分别介绍K-均值聚类算法的步骤和其优缺点。 K-均值聚类算法的步骤如下&#xff1a; 初始化K个聚类中心&#xf…

2024OD机试卷-分配土地(java\python\c++)

题目&#xff1a;分配土地 题目描述 从前有个村庄&#xff0c;村民们喜欢在各种田地上插上小旗子&#xff0c;旗子上标识了各种 不同的只数字。某天集体村民决定将覆盖相同数字的最小矩阵形的土地分配给村里做出巨大贡献的村民&#xff0c;请问此次分配土地&#xff0c;做出贡…

电力电子技术——异步调制和同步调制

电力电子技术——异步调制和同步调制 在电力电子技术中,PWM(脉冲宽度调制)是一种常见的调节技术,可以用于控制电路中的电压或电流。异步调制和同步调制是两种常见的PWM调制方式,它们有着不同的原理和应用。 异步调制 异步调制(Asynchronous Modulation):异步调制是指…

前端性能优化篇之懒加载的概念、特点、实现原理、懒加载与预加载的区别

目录 懒加载的概念懒加载的特点懒加载的实现原理懒加载与预加载的区别 懒加载的概念 懒加载&#xff0c;也叫做延迟加载或按需加载&#xff0c;是一种用来优化网页性能的方法。在包含许多图片的长网页或应用中&#xff0c;如果一开始就加载所有图片&#xff0c;会导致页面加载…

Python无向图--邻接列表转为邻接矩阵表示

这段代码实现了一个简单的社交网络类 SocialNetwork&#xff0c;并提供了一些基本操作&#xff0c;如添加用户、用户之间的关注关系、获取关注者和正在关注的用户等功能。 总的来说&#xff0c;这段代码实现了一个简单的社交网络&#xff0c;提供了基本的用户管理和关系建立功…

如何基于Spring Boot项目从零开始打造一个基于数据库号段模式去中心化的分布式ID生成方案

一、前言 在当前系统开发过程中&#xff0c;单体架构的应用正在走向消亡&#xff0c;越来越多的应用开始分布式架构&#xff0c;在分布式架构设计过程中&#xff0c;有一个问题往往避免不了&#xff0c;就是分布式ID生成问题。 在常见解决方案中&#xff0c;有使用雪花算法或…

K8S探针分享

一&#xff0c;探针介绍 1 探针类型 livenessProbe&#xff1a;存活探针&#xff0c;用于判断容器是不是健康&#xff1b;如果探测失败&#xff0c;Kubernetes就会重启容器。 readinessProbe&#xff1a;就绪探针&#xff0c;用于判断是否可以将容器加入到Service负载均衡池…

Access2019直接将数据导入SQL Server数据库中,再直接链接回来

Access2019 的数据表等&#xff0c;除了通过 SSMA 导入数据库外&#xff0c;还可以利用access2019 自身的外部数据导出功能来达到目的。本文将详细介绍这一操作过程。 一、命令行操作阶段 1.以SA这一超级用户登录SQL Server&#xff0c;创建一个数据库&#xff0c;例如“个人…