商城秒杀实战
文章平均质量分 94
长勺
这个作者很懒,什么都没留下…
展开
-
秒杀系统 通用缓存Key
本博客纯属记录小白的学习过程,自娱自乐,大佬可以跳过 为什么要实现通用缓存Key? 思考如何实现? 具体实现思路和实现代码 接口 BasePrefix 抽象类: 具体实现类: 用户UserKey只去继承了super(prefix),即public BasePrefix(String prefix),那么代表user的key的过期时间为不会过期。原创 2020-05-11 19:54:06 · 452 阅读 · 7 评论 -
秒杀系统 MD5
本博客纯属记录小白的学习过程,自娱自乐,大佬可以跳过 笔者认为登录功能不难做,但是要做出一个安全可靠的登录界面却非常的难,很多人会说,登录功能是最简单的业务代码,但是笔者认为许多网站出现用户登录密码泄露事件都和这个登录有一定的关系,所以登录功能必须好好研究一下,现在就利用MD5实现相对安全的登录模块。注意是相对安全。原创 2020-05-11 05:51:40 · 994 阅读 · 19 评论 -
秒杀系统 安全优化 接口限流防刷
接口限流防刷: 限制同一个用户一秒钟或者一分钟之内只能访问固定次数,在服务端对系统做一层保护。 思路:利用缓存实现,用户每次点击之后访问接口的时候,在缓存中生成一个计数器,第一次将这个计数器置1后存入缓存,并给其设定有效期,比如一分钟,一分钟之内再访问,那么数值加一。一分钟之内访问次数超过限定数值,直接返回失败。...原创 2020-05-09 01:02:15 · 1048 阅读 · 14 评论 -
秒杀系统 安全优化 数学公式验证码
秒杀接口地址的隐藏可以防止恶意用户通过频繁调用接口来请求的操作,但是无法防止机器人,刷票软件恶意频繁点击按钮来刷请求秒杀地址接口的操作。 高并发下场景,在刚刚开始秒杀的那一瞬间,迎来的并发量是最大的,减少同一时间点的并发量,将并发量分流也是一种减少数据库以及系统压力的措施(使得1s中来10万次请求过渡为10s中来...原创 2020-05-08 23:59:27 · 1248 阅读 · 13 评论 -
秒杀系统 安全优化 秒杀接口地址隐藏
秒杀接口地址隐藏 每次点击秒杀按钮,才会生成秒杀地址,秒杀地址不是写死的,是从服务端获取,动态拼接而成的地址。(HTTP协议是明文传输,前端是防不住恶意用户的攻击,所以安全校验要放在服务端,从而禁止掉这些恶意攻击。) 实现思路: 在进行秒杀之前,去后端获取一个动态的秒杀地址path(服务端生成随机数作为path)...原创 2020-05-08 23:29:52 · 2322 阅读 · 10 评论 -
秒杀系统 高并发秒杀系统接口优化 RabbitMQ异步下单
针对秒杀的业务场景,在大并发下,仅仅依靠页面缓存、对象缓存或者页面静态化等还是远远不够。数据库压力还是很大,所以需要异步下单,如果业务执行时间比较长,那么异步是最好的解决办法,但会带来一些额外的程序上的复杂性。 思路: 系统初始化,把商品库存数量stock加载到Re...原创 2020-05-08 20:28:12 · 1830 阅读 · 14 评论 -
秒杀系统 高并发秒杀接口优化
高并发秒杀接口优化 接口优化(核心思路:减少对数据库的访问) Redis预减库存减少对数据库的访问 内存标记减少Redis的访问 请求先入队缓冲,异步下单,增强用户体验 RabbitMQ安装与SpringBoot的集成(目的:同步下单改成异步下单) Nginx水平拓展 压测 项目迭代是一个优化和调整的过程,发现问题解决问题,不断优化。 秒杀业务场景,并发量很大,瓶颈在数据库,怎么解决,加缓存。用户发起请求时,从浏览器开始,在浏览器上做页面静态化直接将页面缓存到用户的浏览器端,然后请求到达网站之前可以部原创 2020-05-08 20:01:21 · 1330 阅读 · 5 评论 -
秒杀系统 秒杀静态化+订单详情静态化
秒杀静态化 改造商品详情页面的点击秒杀的业务逻辑,我们调用js方法实现ajax异步发送消息,如果秒杀成功,那么直接由客户端去跳转详情页面 window.location.href=“order_detail.htm?orderId=”+data.data.id; 1 function doMiaosha(){ /...原创 2020-05-08 14:47:32 · 1140 阅读 · 5 评论 -
秒杀系统 页面优化技术 商品详情页面静态化(前后端分离)
页面静态化+前后端分离 常用技术AngularJS、Vue.js 优点:利用浏览器的缓存 本文只是简单的实现页面静态化: 将页面直接缓存到用户的浏览器上面,好处:用户访问数据的时候,不用去请求服务器,直接在本地缓存中取得需要的页面缓存。 未作页面静态化:请求某一个页面,访问缓存,查看缓存中是否有,缓存中有直接...原创 2020-05-08 01:17:22 · 1280 阅读 · 16 评论 -
秒杀系统 页面优化技术 页面缓存+URL缓存+对象缓存
页面优化技术 页面缓存+URL缓存+对象缓存 由于并发瓶颈在数据库,想办法如何减少对数据库的访问,所以加若干缓存来提高,通过各种粒度的缓存,最大粒度页面缓存到最小粒度的对象级缓存。 页面静态化,前后端分离 都是纯的html,通过js或者ajax来请求服务器,如果做了静态化,浏览器可以把html缓存在客户端。 静态...原创 2020-05-07 21:33:11 · 892 阅读 · 0 评论 -
秒杀系统 订单详情页
秒杀成功后,会生成秒杀订单,然后和订单数据信息一起跳转至订单详情页面(order_detail.html) 根据orderStatus的值来判定订单的状态: 0 未支付 1 代发货 2 已发货 3 已收货 4 已退款 order_detail.html完整代码: 订单详情 ...原创 2020-05-07 17:00:27 · 895 阅读 · 6 评论 -
秒杀系统 秒杀功能实现
先去设置数据库里面的秒杀时间 假设当前时间是2019-05-28 19:30:12 1.已经开始 2.秒杀结束 3.秒杀倒计时 所以我们去秒杀第一个商品: 在之前的goods_detail.html里面的秒杀按钮点击之后提交/miaosha/do_miaosha,以POST类型提交,带有数据是秒杀商品的goo...原创 2020-05-07 16:53:26 · 1288 阅读 · 1 评论 -
秒杀商城系统 商品详情页 秒杀倒计时功能实现 (十一)
在上一节中,我们已经实现秒杀商品的列表页的显示,其中可以点击每一个商品的【详情】查看具体的秒杀信息,那么我们这一节就来实现商品的详情页面的显示以及秒杀倒计时功能实现。【详情】链接中有{goodsId}作为参数,后端@PathVariable(“goodsId”)long goodsId拿到这个goodsId,然...原创 2020-05-07 16:20:23 · 1175 阅读 · 2 评论 -
秒杀商城系统 商品列表页的设计 (十)
数据库商品为什么要分商品表和秒杀商品表? 假设商品和秒杀商品都在一张表中,秒杀活动经常以不同的形式展开,数据库字段也要经常改啊,那和数据库有关的老代码是不是也要一起改,当数据库不断修改,后期维护也比较困难。 前端goods_list.html页面代码: <!DOCTYPE html> <!-- 使用thymeleaf,配置相应的 --> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta c原创 2020-05-07 02:15:43 · 609 阅读 · 4 评论 -
秒杀商城系统 分布式Session (八)
我们的秒杀服务,实际的应用可能不止部署在一个服务器上,而是分布式的多台服务器,这时候假如用户登录是在第一个服务器,第一个请求到了第一台服务器,但是第二个请求到了第二个服务器,那么用户的session信息就丢失了。 解决:session同步,无论访问那一台服务器,session都可以取得到。 本系统:利用一台缓存...原创 2020-05-07 01:02:14 · 1165 阅读 · 23 评论 -
秒杀商城系统 JSR303 全局异常处理 (七)
JSR303参数校验 https://blog.csdn.net/u014029255/article/details/55518598 为什么选择jsr303 参数校验是我们程序开发中必不可少的过程。用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。后端参数校验最简单的做法是直接在业务方法里面进行判断,当判断成功之后再继续往下执行。但这样带给我们的是代码的耦合,冗余。当我们多个地方需要校验时,我们就需要在每一个地原创 2020-05-06 20:48:54 · 841 阅读 · 26 评论 -
秒杀商城系统 MD5加密 (六)
什么是MD5加密? 通俗说 md5是一种信息摘要算法,它可以从需要加密的数据中按照一定的规则生成一个特殊的字符串,并且一个文件所对应的MD5摘要是固定的,当文件内容变化后,其MD5值也会不一样,因此,在应用中经常使用MD5值来验证一段数据有没有被篡改。 比如,在数据的发送方将原始数据生成出MD5值,然后把原始数据连同其MD5值一起传给接收方,接收该收到数据后,先将原始数据用MD5算法生成摘要信息,然后再将此摘要信息与发送方发过来的摘要信息进行比较,如果一致就认为原始数据没有被修改,否则原始数据就是被原创 2020-05-05 18:43:50 · 1155 阅读 · 12 评论 -
秒杀商城系统 安装与集成Redis (五)
Redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把原创 2020-05-05 17:27:46 · 402 阅读 · 18 评论 -
秒杀商城系统 集成Mybatis druid (四)
数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名、密码了,然后我们就可以打开门去任意的存取东西了。这个时候,我们与数据库之间的连接就是「数据库连接」。 这个时候问题就来了,当我们仅仅只需要去取一个东西的时候,我们取完东西随手关上门,然后拔出钥匙,这完全是再正常不过的流程了,完全没毛病,但是,我们大部分时间是需要一件件的把仓库中的东西搬到外面停放的大卡车上,那这时候我们如果取一件东西把门锁上,然后再打开门取一件再次锁原创 2020-05-05 12:08:30 · 424 阅读 · 9 评论 -
秒杀系统 Thymeleaf
本博客纯属记录小白的学习过程,自娱自乐,大佬可以跳过 Thymeleaf是什么,有什么特点,为什么选择它? 学过jsp的同学应该知道jsp相当于Java和html的组合,这里我们也可以将Thymeleaf 看作jsp,参考网上一句话,这是理解thymeleaf的关键, 它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。而且浏览器解释 html 时会忽略未定义的标签属性, 自然模板,原型即页面。 语法优雅易懂,支持这两种OGNL,SpringEL编码方式 ...原创 2020-05-05 02:05:31 · 570 阅读 · 32 评论