- 博客(24)
- 收藏
- 关注
原创 【学习笔记】seckill-秒杀项目--(10)安全优化
引言当我们秒杀开始时,不会直接调秒杀接口,而是获取真正秒杀接口的地址,根据每个用户秒杀的不同商品是不一样的。这样可以避免有些人提前通过脚本准备好固定地址进行秒杀。这种方式的缺点是有可能能提前获取到秒杀接口地址,这种时候可以再进行一次验证码的防护。如果没有验证码的话,一秒内可能有很多请求,加上验证码可以延迟请求的时间,服务器承受的压力就没有那么大。为了减少并发量,还可以进行一次接口的限流。一、秒杀接口地址隐藏针对不同用户秒杀不同商品,设计秒杀接口地址不同。1.1 控制层修改/** * 秒杀 *
2022-05-13 20:45:11
935
原创 【学习笔记】seckill-秒杀项目--(9)接口优化
一、redis通过redis预减库存,来减少数据库访问。可以在初始化阶段,将商品库存加入到redis中。后续直接在redis中进行预减库存操作。后续的下单可以先返回给客户端提示信息,同时将请求发送到消息队列,来实现订单的创建等操作,实现异步操作。客户端的页面使用轮询来判断订单是否创建成功。二、内存标记通过内存标记减少redis访问。三、消息队列请求进入消息队列,实现异步下单。3.1 RabbitMQ安装首先将erlang以及RabbitMQ安装包传到虚拟机中,注意两个版本需要对应。执行
2022-05-12 16:22:57
577
原创 【RabbitMQ】消息传递模型
生产者是发送消息的用户程序。队列是存储消息的缓冲区。使用者是接收消息的用户应用程序。RabbitMQ消息传递模型的核心思想是生产者从不直接向队列发送任何消息。实际上,很多时候生产者甚至根本不知道消息是否被传递到任何队列。相反,生产者只能向交换器发送消息。交换是一件很简单的事情。它一边接收来自生产者的消息,另一边将消息推送到队列。交换器必须确切的知道如何处理它接收到的消息,比如是附加到一个特定的队列还是多个队列或者被丢弃。它的规则由交换类型定义。交换类型:direct 直连,topic 主题, head.
2022-05-12 13:58:54
758
原创 【学习笔记】seckill-秒杀项目--(7)压力测试
一、JMeter简单使用添加线程组,在线程组里设置要测试的线程数等。在线程组里添加HTTP请求默认值(设置请求ip端口号等)、HTTP请求(测试哪个页面)、需要查看的结果等。在聚合报告里可以看到设置1000个线程的情况下吞吐量大概为190.(windows环境)二、虚拟机环境压力测试首先在虚拟机服务器中安装JDK以及MySQL。把项目打包,JMeter打包,发布到虚拟机中。在linux中执行./jmeter.sh -n -t first.jmx -l result.jtl进行压力测试,把结果
2022-05-03 16:01:44
1987
原创 【学习笔记】seckill-秒杀项目--(6)秒杀功能
一、秒杀倒计时1.1 跳转逻辑在跳转到详情页面的时候,对比秒杀开始时间、结束时间与当前时间。在model中传入秒杀状态与倒计时时间。在前端页面根据秒杀状态与倒计时的状态进行不同的显示。/** * 跳转商品详情页 * @author 47roro * @date 2022/4/15 * @param goodsId * @return java.lang.String **/@RequestMapping("/toDetail/{goodsId}")public String toDe
2022-04-16 18:17:24
732
原创 【学习笔记】seckill-秒杀项目--(5)实现商品列表页、详情页
一、创建表单1、创建表准备商品表、订单表、秒杀商品表、秒杀订单表。(设计较为简单,重点在秒杀,不在设计表。)商品表:create table `t_goods`( `id` BIGINT(20) not null AUTO_INCREMENT COMMENT '商品id', `goods_name` VARCHAR(16) DEFAULT NULL COMMENT '商品名称', `goods_title` VARCHAR(64) DEFAULT NULL COMMENT '商品标题',
2022-04-15 22:17:54
584
原创 【问题解决】seckill-秒杀项目 -- 服务端异常
问题描述:在登录页面输入账号密码都正确的情况下,显示服务端异常。但是打开页面调试窗口发现doLogin状态码是200。显示的是event handler error。检查发现redis已经开启,防火墙也没问题。后来找到是GoodsMapper.xml文件里代码写错了。select语句里的resultType写成了resultMap。导致无法读取到商品列表。跳转页面失败。错误代码:<!-- 获取商品列表 --><select id="findGoodsVo" resultMap=
2022-04-15 21:22:48
612
原创 【学习笔记】seckill-秒杀项目--(4)登录功能总结及优化
一、总结一开始使用最简单的从controller 到 service 到数据库。发现参数校验比较麻烦。所以引进了validation依赖。添加了参数校验,可以抛异常,但是无法再页面进行异常状态显示。于是添加了全局异常处理类。如果只是单应用,就没有问题。但后来肯定要做成分布式的,就会遇到分布式session的问题。解决分布式session的问题有两种解决方法:spring session、redis存储用户信息。最后每一个接口都需要做用户校验,比较麻烦。于是加上自定义的参数校验,来定义用户参数
2022-04-15 15:22:14
909
原创 【学习笔记】seckill-秒杀项目--(3)分布式Session
分布式Session问题由于Nginx使用默认负载均衡策略(轮询),请求会按照时间顺序逐一发到后端应用。在Tomcat1登录后,用户信息存放在Tomcat1的Session里,后来被分到了Tomcat2上,这时候Tomcat2的Session没有用户信息,所以需要重新登录。解决方案有:Session复制、前端存储、Session粘滞、后端集中存储这些方法。几种方法各有优缺点,需要我们根据实际情况选择。一、使用SprignSession实现1. 添加依赖spring data redis、对象池.
2022-04-05 14:45:21
1733
原创 【学习笔记】seckill-秒杀项目--(1)搭建项目
一、系统方案二、项目搭建1. 引入依赖包括thymeleaf组件、web组件、test组件、MySQL驱动、Mybatis-plus、lombok插件 <dependencies> <!--thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactI
2022-04-03 15:37:56
1638
5
原创 【IDEA】 控制台中文乱码解决
一、普通工程1、找到idea的安装路径下的bin目录,选择.vmoptions文件2、用记事本打开后,在最后一行添加-Dfile.encoding=UTF-83、打开IntelliJ IDEA>File>Setting>Editor>File Encodings,将Global Encoding、Project Encoding、Default encodeing for properties files这三项都设置成UTF-8。二、web项目1、点击工具栏上的配置服
2021-11-25 11:22:08
367
原创 【Python】PyQt5 从父窗口中打开子窗口,并向父窗口传递子窗口的信号以及数据。
pyqt5 在父窗口中打开子窗口,子窗口和父窗口实现信号以及参数的传递。
2021-11-16 20:32:40
8983
原创 【Python】PyQt5 指示灯控件的制作,以及窗口动态添加、删除指示灯控件
pyqt 自定义了一个指示灯控件,并在窗口中实现动态添加、删除指示灯控件的操作。
2021-11-16 20:00:32
8097
1
原创 【Python】PyQt5 在窗口中使用自定义的QWidget,并重写paintEvent
在窗口中放置一个QWidget,用于画图(使用QPainter),其余位置可以放置别的控件。自定义QWidget类,重写PaintEvent后。可以单独作为一个控件放在其他的窗口中。
2021-11-11 21:30:47
4823
6
原创 【Matlab】matlab连接mysql数据库
一、软件及驱动版本matlab:2021amysql:mysql8.0JDBC驱动:mysql-connector-java-8.0.27.jar二、驱动下载官网地址选择合适版本:http://mvnrepository.com/artifact/mysql/mysql-connector-java这里我选择的是最新版本8.0.27,点击jar包进行下载。三、matlab与mysql连接1、驱动位置将下载好的 mysql-connector-java-8.0.27.jar 放在mat
2021-10-26 13:29:00
4663
6
原创 【Python】PyQt5 工具配置:QT Designer 、PyUIC、Pyrcc
在安装了 pyqt5 以及 pyqt5-tools 后,QtDesigner 、PyUIC 以及 Pyrcc 就已经在 “Python安装路径\Lib\site-packages\pyqt5-tools” 路径下了。下面进行三个工具的配置。
2021-10-03 17:29:45
1528
原创 【LaTeX】下载及安装步骤
一、TeX Live下载进入TeX Live官网(http://tug.org/texlive/),点击on DVD点击downloading the TeX Live iso image and burning your own DVD选择最近的镜像网站选择.iso 文件下载,文件大小3G,选择网络好的进行下载。双击下载好的.iso文件,用管理员身份打开advanced.bat文件。耐心等待,出现提示窗,关闭病毒扫描软件后,点击continue.点击修
2021-10-02 19:44:20
2318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人