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

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.mzph.cn/diannao/20366.shtml

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

相关文章

408数据结构-图的存储与基本操作 自学知识点整理

前置知识&#xff1a;图的基本概念 图的存储必须完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生相当大的影响&#xff0c;因此选取的存储结构应适合于待求解的问题。 图的存储 邻接矩阵法 所谓邻接矩阵存储&a…

每天一个数据分析题(三百四十三)

同环比是帮助阅读者了解维度项表现水平有没有随着时间的推移而得以增长提升&#xff0c;以下对于同环比的说法正确的是&#xff1f; A. 同环比计算方法一般适用于对长周期业务行为结果的观测 B. 若产品具备季节属性特征&#xff0c;则应优先使用同比计算方法 C. 上期值一般指…

利用OBS+VLC+ASS插件实现多路rtsp慢直播流轮播播放

利用OBS+VLC+ASS插件实现多路rtsp慢直播流轮播播放 解决方案速览软件安装第一次使用OBS界面(不是第一次使用可以跳过该步骤)添加VLC视频源利用OBS多个**场景**特性实现布置多个VLC-rtsp视频流场景轮播解决方案速览 利用OBS进行本地直播画面的构建。添加VLC视频源:安装完VLC后…

c++框架介绍

C源文件后缀名.cc/.cpp&#xff0c;头文件后缀名.hh/.hpp C&#xff1a;编译使用g命令 3.C输入输出流比c中的printf更加简化 4.日志系统&#xff1a;拿到一个新的程序&#xff0c;怎么读取借助于日志系统&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&…

了解m4s格式

正常在hls V7 和 DASH中都会使用m4s存放数据。他们使用fmp4的方式来存放信息&#xff1a; fmp4格式 &#xff1a; 一、hls V7介绍 1. 包含的文件&#xff1a; 2. prog_index.m3u8中 指明了 init.mp4与 上面各个.m4s文件的关系&#xff0c;具体内容为&#xff1a; 其中init.mp…

USB - 进入Suspend状态和Cable长短的关系

USB 电缆的长度会对电流产生影响&#xff0c;但这主要是由于电缆的电阻造成的。下面是其工作原理&#xff1a; 1. 电缆电阻&#xff1a; USB 电缆越长&#xff0c;电阻越大。这种电阻会导致电缆上的电压下降&#xff0c;从而影响设备端的可用电压水平。 2. 电压下降&#xff1a…

[数据集][图像分类]轮胎纹理识别裂纹和正常轮胎分类数据集1028张2类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1028 分类类别数&#xff1a;2 类别名称:["cracked","norma…

容器技术基础理论与常用命令:必知必会,效率翻倍!

如何利用容器技术提升你的工作效率&#xff1f;掌握基础理论和常用命令是必不可少的&#xff0c;本文将为你全面介绍容器技术&#xff0c;并教你必知必会的技能&#xff0c;让你工作、学习效率翻倍&#xff0c;对于网络安全工作者也是必不可少的技能&#xff01; 0. 引言 学习…

【Mac版】Java生成二维码

软件版本 IntelliJ IDEA&#xff1a;2023.2 JDK&#xff1a;17 Tomcat&#xff1a;10.1.11 Maven&#xff1a;3.9.3 技术栈 servlet谷歌的&#xff1a;zxing 生成普通的黑白二维码在二维码中间添加一个小图标 github开源项目&#xff1a;qrcode qrcode开源项目的内部是基于z…

一些关于深度聚类以及部分对比学习的论文阅读笔记

目录 资料SwAV问题方法方法的创新点为什么有效有什么可以借鉴的地方聚类Multi-crop 代码 PCL代码 Feature Alignment and Uniformity for Test Time Adaptation代码 SimSiam 资料 深度聚类算法研究综述(很赞&#xff0c;从聚类方法和深度学习方法两个方面进行了总结&#xff0…

OpenEuler22.03 LTS自动安装单机版OpenGauss 5.0.2脚本

1,将脚本和opengauss软件包放到同一个目录下(不要放到/root下面,建议放到/opt/soft下面目录权限要有755),不需要进行解压缩,安装包下载地址如下: 软件包 | openGauss 2.规划好gs的数据目录,提前创建好目录,例如放到/data/guassdb/data下面,你只需要提前创建好/data就行了 3.…

STL中stack的使用

目录 一、stack类介绍和使用 stack类介绍 stack类定义 stack类常见构造函数 stack数据操作 empty()函数 top() pop() 和 push() 函数 size()函数 swap()函数 一、stack类介绍和使用 stack类介绍 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下…

Flutter 中的 IconTheme 小部件:全面指南

Flutter 中的 IconTheme 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 开发框架&#xff0c;它允许开发者使用 Dart 语言来构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;IconTheme 是一个用于设置应用中图标主题的小部件&#xff0c;…

Eclipse语言编程:深入探索与实战应用

Eclipse语言编程&#xff1a;深入探索与实战应用 在编程的世界里&#xff0c;Eclipse以其强大的功能和灵活的扩展性&#xff0c;赢得了广大开发者的青睐。而Eclipse语言编程&#xff0c;更是将这一平台的优势发挥得淋漓尽致。本文将从四个方面、五个方面、六个方面和七个方面&…

「动态规划」买卖股票的最佳时机含冷冻期

力扣原题链接&#xff0c;点击跳转。 给你一个整数数组prices&#xff0c;其中prices[i]表示第i天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;&#xff1a;卖出股票后&a…

Python 关于字符串格式化

在Python中&#xff0c;字符串格式化有以下几种方法&#xff1a; 1.可以使用字符串的str.center(width), str.ljust(width), 和 str.rjust(width)方法来实现字符串的居中、左对齐和右对齐操作。 居中对齐&#xff1a; text "Python" centered_text text.center(10…

华为S5700交换机版本升级步骤

在用一台华为交换机。由于需要做目的镜像接口&#xff0c;在配置过程中超过一个双向流量观察口就会报错。从官方文档查到可以升级版本解决。记录一下升级过程。 首先确定设备型号S5700-28C-EI&#xff0c;版本&#xff1a; s5700ei-v100r005c01spc100。一定仔细阅读官方文档。明…

[python][whl]python模块python_geohash的whl文件所有版本下载地址汇总

Python使用Geohash实现 作为一名经验丰富的开发者&#xff0c;你将要教授一位刚入行的小白如何使用Python实现Geohash。Geohash是一种地理编码系统&#xff0c;将地球分成若干个矩形区域&#xff0c;并为每个矩形区域分配一个唯一的字符串编码。下面是实现这一任务的详细步骤&a…

springboot基本使用十一(自定义全局异常处理器)

例如&#xff1a;我们都知道在java中被除数不能为0&#xff0c;为0就会报by zero错误 RestController public class TestController {GetMapping("/ex")public Integer ex(){int a 10 / 0;return a;}} 打印结果&#xff1a; 如何将这个异常进行处理&#xff1f; 创…

rust 引用本地库

project | env /| component / # 库| src /| led.rslib.rs # 不能是 mod.rs&#xff0c;内容为 pub mod led;Cargo.toml... | abc /| abc / # 工程| src /| main.rsCargo.toml...库和普通工程是一样的&#xff0c;区别在于工程需要引用库 库的 Cargo.toml&#xff1a; [packa…