谷粒商城实战(031 业务-秒杀功能2)

news2025/1/11 5:54:20

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第315p-第p318的内容


秒杀上架

定时上架功能

@EnableAsync 异步
@EnableScheduling 定时调度
@Configuration 配置类
在这里插入图片描述
创建上架定时任务类和方法
在这里插入图片描述

在这里插入图片描述

在秒杀配置类里添加@EnableFeignClients 来开启Feign 使其具备Feign远程调用功能
然后创建一个调用优惠商品系统服务的Feign
在这里插入图片描述

计算3天的信息 使用LocalDate和LocalDateTime
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

格式化日期
在这里插入图片描述

@RableField(exist=false)这个注解代表这个字段不在数据库中存在 ,这个字段只是用来做临时封装
在这里插入图片描述
在这里插入图片描述
设置redis秒杀活动的前缀
在这里插入图片描述

由于我们调用的redisTemplate是String类型的 所以不能用List<Long>格式
stringredistemplate是用json序列化机制 而redistemplate是用jdk的序列化机制 所以存进redis会发生乱码
在这里插入图片描述

缓存活动信息
List<Long>格式改成List<String>格式
在这里插入图片描述
在这里插入图片描述
记得设置redis过期时间

设置秒杀前缀
在这里插入图片描述

将sku信息存到redis里
在这里插入图片描述
添加远程Feign接口
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这里的方法名可以修改 因为上面已经有路径了 所以改名也没事,也可以调到远程的那个方法
在这里插入图片描述

在这里插入图片描述

添加商品随机秒杀码

在这里插入图片描述

随机码是为了在秒杀开始的时候才会暴露,否则知道了action地址 会有脚本攻击
在这里插入图片描述

设置分布式信号量

如果100万的请求过来 只有100个库存,我们在这个信号量设置为100,有通过的请求减一 然后再放行查数据库等操作,如果压根就没减掉,则不需要后续操作,直接打回

在这里插入图片描述
引入redis
在这里插入图片描述

redis配置类
在这里插入图片描述

设置商品信号量的前缀
在这里插入图片描述
在这里插入图片描述

测试上架

在这里插入图片描述

改bug

改成String类型
在这里插入图片描述

改成skuid
在这里插入图片描述
也改成skuid
在这里插入图片描述

查看redis信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

幂等性处理

这里每次调用都会添加,需要发现如果存在就不添加
在这里插入图片描述
在这里插入图片描述
加分布式锁逻辑
在这里插入图片描述
添加锁名称
在这里插入图片描述
不管成功与否都要解锁 所以使用try-finally
建议(这锁粒度有点大 应该配合ID加锁)
在这里插入图片描述

代码判断
这里前面加锁了,所以已经是原子性的了
在这里插入图片描述
判断是否存在信号量
在这里插入图片描述

判断这个sku是否存在
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里不用判断第三个库存,他俩是一体的
在这里插入图片描述

如果多场次的数据都有同一个商品 这里会找不到 所以我们要给这三个都加上场次
建议(秒杀场次key其实直接用ID也可以,不用时间也行)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


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

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

相关文章

网络安全岗秋招面试题及面试经验分享

Hello&#xff0c;各位小伙伴&#xff0c;我作为一名网络安全工程师曾经在秋招中斩获&#x1f51f;个offer&#x1f33c;&#xff0c;并在国内知名互联网公司任职过的职场老油条&#xff0c;希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2024年秋招又快到了金…

【Spring Cloud】微服务日志收集系统-ELK+Kafka

目录 任务背景本文相关文件资料Elasticsearch特性 LogstashKibanaELKELK的缺点引入消息中间件 ELKKafkaKafka概念 ELKKafka环境搭建1.将安装素材上传至服务器 cd /usr/local/soft2.防止Elasticsearch因虚拟内存问题启动失败3.创建镜像li/centos7-elasticsearch4.创建容器5.验证…

线上商城API接口再次升级||电商API接口对接线上商城搭建

功能更新 商城对接【蚂蚁搬客】应用 API接口产品上传及订单状态修改 01 商城对接API应用 ▼ 使用场景 适用于多个电商平台&#xff08;如淘宝、京东、天猫、1688、苏宁、唯品会、当当等&#xff09;的产品搬家&#xff0c;包括产品标题、主图等信息&#xff0c;轻松完成商…

RabbitMQ(三)SpringBoot整合,可靠性投递,死信队列,延迟队列,消费端限流,消息超时

文章目录 整合Springboot概述消费者生产者 消息可靠性投递故障原因解决方案生产者端消息确认机制&#xff08;故障情况1&#xff09;故障情况2解决方案故障情况3解决方案 消费端限流概念 消息超时概念队列层面&#xff1a;配置队列过期消息本身&#xff1a;配置消息过期 死信队…

【赠书第27期】向AI提问的艺术:提示工程入门与应用

文章目录 前言 1 问题的构建 1.1 明确性与具体性 1.2 结构化与层次性 1.3 相关性与针对性 2 提问的技巧 2.1 简洁明了 2.2 避免歧义 2.3 使用自然语言 3 与AI的互动策略 3.1 耐心与理解 3.2 逐步引导 3.3 反馈与调整 4 总结与展望 5 推荐图书 6 粉丝福利 前言 …

YOLO目标检测:框架技术原理和代码实现

Dream推荐 适读人群 &#xff1a;本书适合对YOLO目标检测感兴趣、了解深度学习相关概念的算法工程师、软件工程师等人员阅读。 全面&#xff1a;涵盖6个常用目标检测框架&#xff08;YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOX、YOLOv7&#xff09;的发展状况、技术原理和代码实…

安装Lubuntu24.04

Lubuntu24.04安装过程与22.04、20.04等完全一致。 记录 01 02 03 04 05 09 给出提示 10 11 12 13 特点 Lubuntu 22.04的特点主要包括以下几点&#xff1a; 轻量级且高效&#xff1a;Lubuntu作为Ubuntu的一个轻量级分支&#xff0c;专注于为低端电脑、老旧电脑或需要最大限…

代码随想录算法训练营第四十四天 | 01背包问题 二维、 01背包问题 一维、416. 分割等和子集

01背包问题 二维 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 1.dp数组定义 dp[i][j] 下标为[0,i]之间的物品&…

Microsoft Fabric 是什么?

最近半个月没有更新内容&#xff0c;原因是什么呢&#xff1f; 原因是花了两周的时间备考了一下"Microsoft Certified: Fabric Analytics Engineer Associate"的考试认证。 非常幸运考试通过了。 那什么是Microsoft Fabric 呢&#xff1f; Microsoft Fabric 是一个…

瑞芯微 RK3588 环境搭建 SDK编译

厂家给的资料下载下来之后 我的目录如下 厂家推荐是虚拟机下 我这真好有真实的UBUNTU环境 就不用虚拟机了 直接在真机上安装 linux版本是 Ubuntu 22.04 切到Linux目录下 这里主要用到两个目录 一个是源码也即SDK 交叉编译链 编译工具 先安装交叉编译链 按照文档说明 先…

Linux前奏-预热版本

一、操作系统概述 1.1 了解操作系统的作用 我们所熟知的计算机&#xff0c;也就是电脑&#xff0c;就是由硬件和软件来组成的 硬件&#xff1a;计算机系统中由电子机械&#xff0c;和各种光电元件等组成的各种物理装置的总称 软件是什么呢&#xff1f; 软件&#xff1a;用…

electron初学

最近有一个开发桌面端的业务&#xff0c;考虑到跨平台就使用了electron。 引用官网&#xff1a;Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows…

就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi

通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | ->1. 常用选项说明 --build-arg&#xff0c;设…

el-tooltip 样式修改

<template><div><el-tooltip class"item" effect"dark" content"Right Bottom 提示文字" placement"right-end"><el-button>右下</el-button></el-tooltip></div> </template><sc…

接口请求参数为文件时如何测试

方法 工具&#xff1a;Postman 步骤&#xff1a;①点击body②点击form-data③选择key类型为fie ④输入参数名⑤选择参数上传⑥发送请求

Memoro:一款功能强大的堆栈数据细节分析工具

关于Memoro Memoro是一款功能强大的堆栈数据细节分析工具&#xff0c;该工具可以给广大研究人员提供关于堆内存数据的详细信息&#xff0c;并给出分析数据。 Memoro不仅可以告诉我们目标程序什么时候、在哪里进行了堆内存分配&#xff0c;而且还可以告诉我们目标程序是如何实际…

JPA详解

文章目录 JPA概述JPA的优势JPA注解 JPA概述 Java Persistence API&#xff08;JPA&#xff09;是 Java EE 平台的一部分&#xff0c;它为开发者提供了一种用于对象关系映射&#xff08;ORM&#xff09;的标准化方法。JPA 提供了一组 API 和规范&#xff0c;用于在 Java 应用程…

前端vue搭建

1.找一个合适的模板&#xff0c;可以用vue-element-admin的模板&#xff0c;但是个人认为这个模板太大了&#xff0c;做小项目修改起来比较复杂&#xff0c;可以找一个比较小的项目 2.我找的项目git clone https://github.com/tuture-dev/vue-admin-template.git&#xff0c;这…

Vivado报错 [Synth 8-9917] port ‘xx‘ must not be declared to be an array

报错位置&#xff1a; input wire [11:0] i_data [7:0] ,报错原因&#xff1a; Verilog并不支持将端口设置为数组类型&#xff0c;而SystemVerilog支持此写法。 解决办法&#xff1a; 将文件后缀.v改成.sv格式&#xff1b; 此时工程中文件确实&#xff0c;修正修改格…

留言板——增添功能(持久化存储数据,使用MyBatis)

目录 一、数据准备 二、引入MyBatis 和 MySQL驱动依赖 三、配置MySQL账号密码 四、编写后端代码 五、调整前端代码 六、测试 之前的代码&#xff1a;综合性练习&#xff08;后端代码练习3&#xff09;——留言板_在线留言板前后端交互-CSDN博客 一、数据准备 创建数据库…