
商城秒杀系统
程序员小台
这个作者很懒,什么都没留下…
展开
-
【SpringBoot商城秒杀系统项目总结25】 项目的亮点和难点及问题解决(源码地址)
【商城限时秒杀系统总结】在高并发情况下的秒杀优化,我们知道当并发数达到一定量的时候,会对数据库服务器带来很大的压力,那么如何缓解这些压力以及提高并发的QPS就是整个项目的解决重点,也是我们优化系统的目标。项目的亮点与难点1.使用分布式Seesion,可以实现让多台服务器同时可以响应。2.使用redis做缓存提高访问速度和并发量,减少数据库压力,利用内存标记减少redis的访问。3.使用页...原创 2019-05-31 15:41:29 · 23212 阅读 · 30 评论 -
【SpringBoot商城秒杀系统项目实战24】安全优化 接口限流防刷
接口限流防刷:限制同一个用户一秒钟或者一分钟之内只能访问固定次数,在服务端对系统做一层保护。思路:利用缓存实现,用户每次点击之后访问接口的时候,在缓存中生成一个计数器,第一次将这个计数器置1后存入缓存,并给其设定有效期,比如一分钟,一分钟之内再访问,那么数值加一。一分钟之内访问次数超过限定数值,直接返回失败。下一个一分钟,数据重新从0开始计算。因为缓存具有一个有效期,一分钟之后自动失效。获...原创 2019-05-31 11:28:18 · 2262 阅读 · 1 评论 -
【SpringBoot商城秒杀系统项目实战23】安全优化 数学图形验证码
秒杀接口地址的隐藏可以防止恶意用户通过频繁调用接口来请求的操作,但是无法防止机器人,刷票软件恶意频繁点击按钮来刷请求秒杀地址接口的操作。高并发下场景,在刚刚开始秒杀的那一瞬间,迎来的并发量是最大的,减少同一时间点的并发量,将并发量分流也是一种减少数据库以及系统压力的措施(使得1s中来10万次请求过渡为10s中来10万次请求)思路:点击秒杀之前,先输入验证码,分散用户的请求。具体实现是服务端生成...原创 2019-05-31 10:39:42 · 1519 阅读 · 0 评论 -
【SpringBoot商城秒杀系统项目实战22】安全优化 秒杀接口地址隐藏
秒杀系统安全优化 秒杀接口地址隐藏每次点击秒杀按钮,才会生成秒杀地址,秒杀地址不是写死的,是从服务端获取,动态拼接而成的地址。(HTTP协议是明文传输,前端是防不住恶意用户的攻击,所以安全校验要放在服务端,从而禁止掉这些恶意攻击。)实现思路:改造前端秒杀按钮,在发起请求之前,先去获取秒杀地址:<button class="btn btn-primary" type="butt...原创 2019-05-30 17:43:05 · 2220 阅读 · 5 评论 -
【SpringBoot商城秒杀系统项目实战21】高并发秒杀系统接口优化 RabbitMQ异步下单
【秒杀系统的接口优化之异步下单】问题: 针对秒杀的业务场景,在大并发下,仅仅依靠页面缓存、对象缓存或者页面静态化等还是远远不够。数据库压力还是很大,所以需要异步下单,如果业务执行时间比较长,那么异步是最好的解决办法,但会带来一些额外的程序上的复杂性。思路:系统初始化,把商品库存数量stock加载到Redis上面来。后端收到秒杀请求,Redis预减库存,如果库存已经到达临界值的时候,就...原创 2019-05-30 16:44:24 · 5555 阅读 · 9 评论 -
【SpringBoot商城秒杀系统项目实战20】高并发秒杀接口优化
高并发秒杀接口优化秒杀业务场景,并发量很大,瓶颈在数据库,怎么解决,加缓存。用户发起请求时,从浏览器开始,在浏览器上做页面静态化直接将页面缓存到用户的浏览器端,然后请求到达网站之前可以部署CDN节点,让请求先访问CDN,到达网站时候使用页面缓存。页面缓存再进一步的话,粒度再细一点的话就是对象缓存。缓存层依次请求完之后,才是数据库。通过一层一层的访问缓存逐步的削减到达数据库的请求数量,这样才能保证...原创 2019-05-30 16:30:57 · 4830 阅读 · 10 评论 -
【SpringBoot商城秒杀系统项目实战19】秒杀静态化+订单详情静态化
秒杀静态化改造商品详情页面的点击秒杀的业务逻辑,我们调用js方法实现ajax异步发送消息,如果秒杀成功,那么直接由客户端去跳转详情页面window.location.href="order_detail.htm?orderId="+data.data.id;function doMiaosha(){ //alert("秒杀!"); $.ajax({ url:"/miaosh...原创 2019-05-29 20:58:20 · 1831 阅读 · 5 评论 -
【SpringBoot商城秒杀系统项目实战18】页面优化技术-商品详情页面静态化(前后端分离)
页面静态化 前后端分离1. 常用技术AngularJS、Vue.js2. 优点:利用浏览器的缓存本文只是简单的实现页面静态化:将页面直接缓存到用户的浏览器上面,好处:用户访问数据的时候,不用去请求服务器,直接在本地缓存中取得需要的页面缓存。未作页面静态化:请求某一个页面,访问缓存,查看缓存中是否有,缓存中有直接返回,缓存中没有的话,将数据渲染到html页面再存到缓存,再将整个html页面...原创 2019-05-29 20:13:14 · 2660 阅读 · 2 评论 -
【SpringBoot商城秒杀系统项目实战17】页面优化技术(页面缓存+URL缓存+对象缓存)
页面优化技术页面缓存+URL缓存+对象缓存由于并发瓶颈在数据库,想办法如何减少对数据库的访问,所以加若干缓存来提高,通过各种力度的缓存,最大力度页面缓存到最小力度的对象级缓存。页面静态化,前后端分离都是纯的html,通过js或者ajax来请求服务器,如果做了静态化,浏览器可以把html缓存在客户端。静态资源优化JS/CSS压缩,减少流量。(压缩版的js,去掉多余的空格字符。区别于阅读...原创 2019-05-28 20:51:53 · 2464 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战16】使用JMeter压测秒杀系统(秒杀接口的压测及结果)
JMeter官网:http://jmeter.apache.org/download_jmeter.cgi1.添加一个线程组2.设置1000个线程数,循环10次3.添加Http请求默认值4.新建一个Http请求5.新建一个聚合报告6.启动项目...原创 2019-05-28 20:23:20 · 4538 阅读 · 18 评论 -
【SpringBoot商城秒杀系统项目实战15】订单详情页
秒杀成功后,会生成秒杀订单,然后和订单数据信息一起跳转至订单详情页面(order_detail.html)根据orderStatus的值来判定订单的状态:0 未支付1 代发货2 已发货3 已收货4 已退款order_detail.html完整代码:<!DOCTYPE html><!-- 使用thymeleaf,配置相应的 --><html ...原创 2019-05-28 20:09:19 · 2221 阅读 · 0 评论 -
【SpringBoot商城秒杀系统项目实战14】秒杀功能的实现(秒杀业务逻辑处理)
先去设置数据库里面的秒杀时间假设当前时间是2019-05-28 19:30:121.已经开始2.秒杀结束3.秒杀倒计时所以我们去秒杀第一个商品:在之前的goods_detail.html里面的秒杀按钮点击之后提交/miaosha/do_miaosha,以POST类型提交,带有数据是秒杀商品的goodsId新建一个MiaoshaController,定义接收该秒杀请求的接口方法d...原创 2019-05-28 20:00:22 · 6660 阅读 · 6 评论 -
【SpringBoot商城秒杀系统项目实战13】秒杀商品详情页+秒杀倒计时功能实现
在上一节中,我们已经实现秒杀商品的列表页的显示,其中可以点击每一个商品的【详情】查看具体的秒杀信息,那么我们这一节就来实现商品的详情页面的显示以及秒杀倒计时功能实现。【详情】链接中有{goodsId}作为参数,后端@PathVariable(“goodsId”)long goodsId拿到这个goodsId,然后去数据库查询对应的商品信息,并显示秒杀情况。我们点击商品详情,发送一个连接到后端,...原创 2019-05-28 17:46:54 · 4206 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战12】商品列表页
先创建商品的服务类GoodsService ,注入GoodsDao@Service public class GoodsService { public static final String COOKIE1_NAME_TOKEN="token"; @Autowired GoodsDao goodsDao; @Autowired RedisService redisServic...原创 2019-05-28 17:24:08 · 2374 阅读 · 0 评论 -
【SpringBoot商城秒杀系统项目实战11】分布式Session
我们的秒杀服务,实际的应用可能不止部署在一个服务器上,而是分布式的多台服务器,这时候假如用户登录是在第一个服务器,第一个请求到了第一台服务器,但是第二个请求到了第二个服务器,那么用户的session信息就丢失了。解决:session同步,无论访问那一台服务器,session都可以取得到。本系统:利用一台缓存服务器集中管理session,即利用缓存统一管理session。分布式Session的...原创 2019-05-28 11:14:42 · 3621 阅读 · 12 评论 -
【SpringBoot商城秒杀系统项目实战10】JSR303参数校验+全局异常处理
JSR303参数校验系统在登录的时候做了一个参数校验,也就是说每一个方法的开头都要去做一个校验,那么有没有更简洁的方法呢?那就是使用JSR 303 校验。JSR 303 用于对Java Bean 中的字段的值进行验证,使得验证逻辑从业务代码中脱离出来。是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。1.引入依赖: <dependency> <...原创 2019-05-28 10:27:16 · 2279 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战09】使用两次MD5实现登录功能
两次MD5:用户端:PASS=MD5(明文+固定Salt)服务端:PASS=MD5(用户输入+随机Salt)登录界面:数据库里面存的是做了依次MD5的用户密码与其对应的salt值现在我们登录的时候,要去取得数据库里面对应用户的密码和salt值,然后后台接收了前端做了依次MD5的密码formPass,然后将这个formPass去和数据库里面的salt一起再做一次MD5,然后检测...原创 2019-05-28 09:32:06 · 2531 阅读 · 4 评论 -
【SpringBoot商城秒杀系统项目实战08】两次MD5加密设计
什么是MD5加密?漫画:什么是MD5算法?https://zhuanlan.zhihu.com/p/55841123转载自:程序员小灰为什么做两次MD5?第一次 (在前端加密,客户端):密码加密是(明文密码+固定盐值)生成md5用于传输,目的,由于http是明文传输,当输入密码若直接发送服务端验证,此时被截取将直接获取到明文密码,获取用户信息。加盐值是为了混淆密码,原则就是明文密码不能在...原创 2019-05-28 09:26:57 · 2765 阅读 · 7 评论 -
【SpringBoot商城秒杀系统项目实战07】通用缓存Key的设计与封装
最初的时候不设计KeyPrefix,那么使用类似redisService.set(“key1”,“AAAA”);那么各种各样的字符串常量,那么很不容易管理,可能会出现其他不同模块的功能想要一个同名的key,那么就会出现覆盖掉key的情况,有可能出现不同意义的key被别人开发的时候覆盖,那么使用KeyPrefix来更好的操作和管理缓存中对应的key。给不同模块的key带有一个前缀。不加前缀的情况:...原创 2019-05-27 19:26:34 · 2385 阅读 · 2 评论 -
【SpringBoot商城秒杀系统项目实战06】安装与集成redis
1.Redis 安装Window 下安装下载地址:https://github.com/MSOpenTech/redis/releases。Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。Windows环境安装redis途中遇到的问题:https://...原创 2019-05-27 19:03:00 · 2510 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战05】数据库设计与对应的domain对象
数据库设计:商品表,秒杀商品表,订单表,秒杀订单,用户表秒杀商品表和商品表分开。原因:每次秒杀活动都会操作数据库,修改秒杀商品的字段,因为每次秒杀时候。对应的秒杀时间段,秒杀实现,秒杀功能,价格等都不同,商品表不易于维护。而且,秒杀商品的个数和普通商品的个数是独立计算的,不同于普通商品的库存字段。 create table goods ( id BIGINT(20) primary key...原创 2019-05-27 17:16:31 · 2585 阅读 · 1 评论 -
【SpringBoot商城秒杀系统项目实战04】集成Mybatis与druid
1.在pom.xml文件中添加pom依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1<...原创 2019-05-27 17:10:27 · 2229 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战03】集成Thymeleaf做页面模板
1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>2.生成配置文件新建一个一...原创 2019-05-27 16:10:39 · 2612 阅读 · 4 评论 -
【SpringBoot商城秒杀系统项目实战02】优雅代码编写之封装json输出
搭建起了SpringBoot环境之后,那么就可以开启项目了,我们需要考虑优雅代码编写。我们知道MVC模式Controller类里面一般有两大返回值:rest api的json输出页面一般来说,服务端和客户端要做一个接口的约定。一般封装的json数据代表意义: { "code":0 //500100代表库存不足 "msg":"success" //代表code...原创 2019-05-27 15:55:38 · 2921 阅读 · 3 评论 -
【SpringBoot商城秒杀系统项目实战01】项目框架搭建
SpringBoot理念:零配置只需要两步:引入依赖写入启动类就可以跑起来,不需要其他繁琐的配置,不像之前学习SSM框架那样,需要配置若干bean。1.新建Maven Project2.选择quickstart3.打开pom.xml文件,在相应位置添加依赖。 <parent> <groupId>org.springframework.bo...原创 2019-05-27 15:25:32 · 4184 阅读 · 2 评论 -
【SpringBoot商城秒杀系统秒杀优化学习笔记】
课程目标秒杀的业务场景跟其他业务场景不一样,主要是秒杀的瞬间,并发非常大,如何针对此大并发是我们需要取解决的。秒杀业务,是典型的短时大量突发访问。特点:秒杀时网站的访问量大增;秒杀时购买的请求数量远小于库存,只有部分用户能够成功;业务流程简单,根据先后顺序,下订单减库存;使用技术:前端:Thymeleaf、Bootstrap、JQuery后端:SpringBoot、Mybatis...原创 2019-05-27 14:48:45 · 6370 阅读 · 13 评论