自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (4)
  • 收藏
  • 关注

原创 【商城秒杀项目】-- 项目总结

最近对商城秒杀项目所用到的技术进行了剖析,技术点还是挺多的,本篇博客就来对商城秒杀项目进行一个总结与整理项目相关博客汇总1、【商城秒杀项目】-- 概况2、【商城秒杀项目】-- 对返回json结果的封装、通用缓存Key的设计与封装3、【商城秒杀项目】-- 登录时使用两次MD5加密4、【商城秒杀项目】-- 使用JSR303进行参数校验、全局异常处理5、【商城秒杀项目】-- 分布...

2020-02-27 14:57:18 11495 11

原创 【商城秒杀项目】-- 接口限流防刷

接口限流防刷的目的限制同一个用户一段时间之内只能访问固定次数,在服务端对系统做一层保护实现思路利用缓存实现,当用户每次点击访问接口的时候,在缓存中生成一个计数器,第一次请求的时候将这个计数器计数为1后存入缓存,并给其设定有效期,比如一分钟,如果一分钟之内再访问,那么数值加一;一分钟之内访问次数超过限定数值,就直接返回“访问过于频繁”;等到下一个一分钟,数据又重新从0开始计算,因为给缓存...

2020-02-26 15:09:11 1583

原创 【商城秒杀项目】-- 使用数学图形验证码来进行限流

秒杀接口地址隐藏可以防止恶意用户通过频繁调用接口来请求的操作,但是无法防止机器人,刷票软件还是可以恶意频繁点击按钮来刷请求秒杀地址接口高并发下场景,在刚刚开始秒杀的那一瞬间,迎来的并发量是最大的,减少同一时间点的并发量,将并发量分流也是一种减少数据库以及系统压力的措施(使得1s中来10万次请求过渡为10s中来10万次请求)本篇博客记录如何使用数学图形验证码来进行限流,限流削峰操作具体可参考...

2020-02-26 14:05:14 1022

原创 【商城秒杀项目】-- 秒杀接口地址隐藏

每次点击秒杀按钮的时候,才生成秒杀地址,秒杀地址不是写死的,而是从服务端获取,动态拼接而成的地址(HTTP协议是明文传输,前端是防不住恶意用户的攻击,所以安全校验要放在服务端,从而禁止掉这些恶意攻击),本篇博客记录如何进行秒杀接口地址隐藏进行安全优化实现思路:在进行秒杀之前,先去后端获取一个动态的秒杀地址path(由后端生成随机字符串作为path),然后将这个随机字符串返回给前端,前端将这...

2020-02-26 12:41:51 2575

原创 【商城秒杀项目】-- 使用rabbitmq异步下单

针对秒杀的业务场景,在高并发下,仅仅依靠页面缓存、对象缓存或者页面静态化等还是远远不够,数据库压力还是很大,所以需要异步下单,如果业务执行时间比较长,那么异步是最好的解决办法,但会带来一些额外的程序上的复杂性具体思路:系统初始化,把商品库存数量加载到Redis里面去 后端收到秒杀请求,Redis预减库存,如果库存已经到达临界值的时候,就不需要继续请求下去,直接返回失败,即后面的大量请求无...

2020-02-25 16:11:40 5302

原创 【商城秒杀项目】-- 秒杀的业务逻辑、接口的优化

秒杀业务场景并发量很大,瓶颈在数据库,怎么解决?可以加缓存。用户在发起请求时,从浏览器开始,在浏览器上做页面静态化直接将页面缓存到用户的浏览器端,然后请求到达网站之前可以部署CDN节点,让请求先访问CDN,到达网站的时候使用页面缓存。页面缓存再进一步,粒度再细一点的话就是对象缓存,缓存层依次请求完之后,才是数据库。通过一层一层的访问缓存逐步的削减到达数据库的请求数量,这样才能保证网站在高并发之下扛...

2020-02-25 13:12:22 3045 1

原创 【商城秒杀项目】-- 页面伪静态化

本项目中只是简单的实现页面静态化:将页面直接缓存到用户的浏览器上面好处:用户访问数据的时候,不用去请求服务器,直接在本地缓存中取得需要的页面缓存未作页面静态化时的请求过程:请求某一个页面,访问缓存,查看缓存中是否有,缓存中有直接返回,缓存中没有的话,将数据渲染到HTML页面再存到缓存,再将整个HTML页面返回给客户端显示做了页面静态化的请求过程:第一次是去请求后台渲染好的HTML页面,...

2020-02-24 19:14:18 1284

原创 【商城秒杀项目】-- 页面缓存、URL缓存、对象缓存

常用的页面优化技术页面缓存+URL缓存+对象缓存由于并发瓶颈在数据库,所以要想办法来减少对数据库的访问,可以加若干缓存来解决,通过各种粒度的缓存,最大粒度的页面级缓存到最小粒度的对象级缓存页面静态化,前后端分离页面都是纯的HTML,通过js或者ajax来请求服务器,如果做了静态化,浏览器可以把HTML缓存在客户端静态资源优化JS/CSS压缩,减少流量(使用压缩版的JS,去掉多余的...

2020-02-24 16:44:55 1492

原创 【商城秒杀项目】-- 流量削峰应该怎么做

如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,在秒杀开始那一秒是一条很直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。但是对秒杀这个场景来说,最终能够抢到商品的人数是固定的,也就是说100人和10000人发起请求的结果都是一样的,并发度越高,无效请求也越多。但是从业务上来说,秒杀活动是希望更多的人来...

2020-02-23 11:05:23 2027

原创 【商城秒杀项目】-- 分布式Session的实现、使用Aop校验Token令牌

通常秒杀项目可能不止部署在一个服务器上,而是使用分布式部署在多台服务器,这时候假如用户登录是在第一个服务器,第一个请求到了第一台服务器,这是没问题的;但是第二个请求到了第二个服务器,那么用户的Session信息就丢失了解决:使用session同步,无论访问那一台服务器,session都可以取得到本项目:利用一台缓存服务器集中管理session,即利用缓存统一管理session分布式Se...

2020-02-22 18:00:46 1865

原创 【商城秒杀项目】-- 使用JSR303进行参数校验、全局异常处理

什么是JSR-303JSR是Java Specification Requests的缩写,意思是Java规范提案,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务,JSR已成为Java界的一个重要标准JSR-303是JAVA EE 6中的一项子规范,叫做Bean Validatio...

2020-02-22 15:16:29 883

原创 【商城秒杀项目】-- 登录时使用两次MD5加密

做MD5加密的目的如果不做任何处理,那明文密码就会在网络上进行传输,假如在传输过程中被恶意用户取得这个数据,就可以得到这个密码,所以不安全做两次MD5加密的目的用户端:pwd=MD5(明文+固定Salt)服务端:pwd=MD5(第一次加密后的密码+随机Salt)第一次 (在前端加密):密码加密是(明文密码+固定盐值)生成MD5用于传输,目的是由于http是明文传输,当输入密码若直...

2020-02-21 19:02:05 1709

原创 【商城秒杀项目】-- 对返回json结果的封装、通用缓存Key的设计与封装

对返回json结果的封装在MVC模式中Controller接口类里面一般有两种返回值:rest api的json格式数据、页面;在前后端开发模式中,后端开发人员与前端开发人员会对接口返回值进行约定,返回值一般是以rest api的json格式数据为主,比如下面这种格式:{ "code": 200 //状态码:不同的状态码有着不同的含义 "msg": "success" /...

2020-02-21 16:43:13 1484

原创 关于springboot项目使用@Transactional注解事务不回滚的问题

数据库的事务在我们的项目中应用广泛,最近在一个springboot项目中遇到了使用@Transactional注解后事务不回滚的问题,代码如下:后来查资料发现是因为数据库(MySQL)用的引擎是MyISAM,而MySQL的MyISAM引擎不支持回滚事务,如果需要自动回滚事务,需要将MySQL的引擎设置成InnoDB,并不是因为代码的问题造成的事务不回滚在此总结造成事务不回滚可能的原因:...

2020-02-20 18:29:20 2872

原创 【商城秒杀项目】-- 概况

什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户...

2020-02-20 17:04:16 4624 2

原创 RabbitMQ整合SpringCloud

注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效;生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等消费端核心配置首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况@Rabbi...

2020-02-17 14:55:29 281

原创 RabbitMQ消息模式(TTL消息、死信队列)

什么是TTL消息TTL是Time To Live的缩写,也就是生存时间RabbitMQ支持消息的过期时间,在消息发送时可以进行指定RabbitMQ支持队列的过期时间,从消息入队列开始计算,只要超过了队列的超时时间配置,那么消息自动的清除;针对队列,只要是这个队列的消息,就只有这么长的存活时间注意:主要针对消息设置,跟交换机、队列、消费者设置毫无关系消费端代码:packag...

2020-02-15 21:22:39 820 1

原创 RabbitMQ消息模式(消息的ACK与重回队列)

消费端手工ACK与NACK消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿;如果由于服务器宕机等严重问题,那么我们就需要手工进行ACK,保障消费端消费成功,比如我们在消费端调用第三方接口,但这个第三方接口出现了问题导致接口调用失败,这时我们就要手动签收,使消息重回队列消费端的重回队列消费端重回队列是为了对没有处理成功的消息,把消息重新回递给Broker;一般我...

2020-02-15 20:32:40 1039

原创 RabbitMQ消息模式之消费端限流

为什么要进行消费端限流假设一个场景,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况:巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据,所以我们需要进行消费端限流针对消费端限流RabbitMQ提供的解决方案RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于Cons...

2020-02-15 20:09:06 285

原创 RabbitMQ消息模式之自定义消费者

我们之前都是在代码中编写while循环,进行consumer.nextDelivery方法进行获取下一条消息,然后进行消费处理;但是我们使用自定义的Consumer更加的方便,解耦性更加的强,也是实际工作中最常用的使用方式自定义消费端代码:package com.ue.consumer;import com.rabbitmq.client.AMQP;import com.rabbi...

2020-02-15 15:59:02 1306

原创 RabbitMQ消息模式之Return返回消息机制

Return Listener用于处理一些不可路由的消息正常情况:我们的消息生产者,通过指定一个Exchange和RoutingKey,把消息送达到某一个队列中去,然后我们的消费者监听队列,进行消费处理操作异常情况:在某些情况下,如果我们在发送消息的时候,当前的Exchange不存在或者指定的路由key路由不到,这个时候如果我们需要监听这种不可达的消息,就需要使用Return Listen...

2020-02-15 15:45:20 1748

原创 RabbitMQ消息模式之Confirm确认消息

理解Confirm消息确认机制消息的确认,是指生产者投递消息后,如果Broker收到消息,则会给我们生产者一个应答。生产者进行接收应答,用来确定这条消息是否正常的发送到Broker,这种方式也是消息的可靠性投递的核心保障消费端代码:package com.ue.confirm;import com.rabbitmq.client.Channel;import com.rab...

2020-02-15 15:21:02 217

原创 RabbitMQ消息模式(消息100%的投递、幂等性概念)

1、什么是生产端的可靠性投递保障消息的成功发出 保障MQ节点的成功接收 发送端收到MQ节点(Broker)确认应答 完善的消息进行补偿机制2、BAT/TMD互联网大厂解决生产端的可靠性投递的方案消息落库,对消息状态进行打标,流程图如下:消息的延迟投递,做二次确认,回调检查,流程图如下:3、幂等性是什么可以参考数据库乐观锁机制,比如执行一条更新库存的 SQL 语句,在...

2020-02-15 15:03:23 360

原创 RabbitMQ交换机

1、交换机属性交换机有以下属性:Name:交换机名称Type:交换机类型direct、topic、fanout、headersDurability:是否需要持久化,true为持久化Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该ExchangeInternal:当前Exchange是否用于RabbitMQ内部使用,默认为FalseAr...

2020-02-14 20:40:52 242

原创 RabbitMQ快速入门

快速入门-消息生产与消费(即生产者把消息放到消息队列,然后消费者直接去消息队列取消息进行消费)ConnectionFactory:获取连接工厂Connection:一个链接Channel:数据通信通道,课发送和接收消息Queue:具体的消息存储队列Producer & Consumer:生产和消费者导入所需pom依赖:<dependency> ...

2020-02-14 19:08:04 107

原创 RabbitMQ安装及使用

1、centos安装方式RabbitMQ官网地址:https://www.rabbitmq.com/提前准备:安装Linux必要依赖包下载RabbitMQ必须安装包配置文件修改服务的启动:rabbitmq-server start服务的停止:rabbitmqctl stop_app管理插件:rabbitmq-plugins enable rabbi...

2020-02-14 18:31:38 150

原创 RabbitMQ简介

1、各大主流中间件对比ActiveMQActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,并且它是一个完全支持JMS规范的消息中间件;其丰富的API、多种集群构建模式使得他成为业界老牌消息中间件,在中小型企业中应用广泛KafkaKafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息...

2020-02-14 17:19:49 302

原创 java自定义注解介绍

Java注解简介1. Java注解(Annotation)Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解相关类都包含在java.lang.annotation包中2. Java注解分类 JDK基本注解、JDK元注解、自定义注解3. JDK基本注解@Override:重写、@Deprecated:已过时、@Sup...

2020-02-14 14:40:28 171

原创 自定义注解+Aop+springboot应用于记录操作日志

在我们做的系统中,有时需要记录操作日志,方便找到某个操作是谁进行的,这个可以用spring的aop来实现,本篇博客记录用自定义注解+aop应用于springboot项目中实现操作日志的记录

2020-02-13 16:12:15 1622 1

原创 用idea部署springboot项目到docker

本篇博客记录如何用idea里的docker插件去部署springboot项目到docker容器里相关Linux的准备工作1、配置docker远程连接端口编辑服务器上的docker.service文件vi /usr/lib/systemd/system/docker.service找到如下图所示的地方,添加以下东西(版本需为centos7以上):-H tcp://0.0....

2020-02-10 17:54:34 4537 1

原创 Docker镜像上传至阿里云

本篇博客记录如何将Docker镜像上传至阿里云(或从阿云下载镜像)前期准备1.注册阿里云账户阿里云官方网站链接:https://dev.aliyun.com2.登陆账户3.搜索“容器镜像服务”,配置Docker加速器在搜索框输入“容器镜像服务”,进入“容器镜像服务控制台”4.创建镜像仓库的命名空间例如:lj_docker5.绑定一个自己的代码源,如GitHu...

2020-02-09 17:08:31 540

原创 Docker之alpine制作jre镜像(瘦身)

本篇博客记录如何制作jre镜像,即将jdk里的jre进行瘦身,把多余的文件都干掉1、首先下载jre下载地址是https://www.java.com/en/download/manual.jsp,大概是77M;最终下载的资料为:jre-8u221-linux-x64.tar.gz2、rz上传至centos,并删除无用的文件,并重新压缩#解压tar -zxvf jre-8u221...

2020-02-09 14:36:37 1466

原创 Docker之alpine制作jdk镜像

alpine Linux简介1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc和BusyBox以减少系统的体积和运行时的资源消耗。2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages...

2020-02-08 22:25:31 5342 1

原创 Dockerfile简介及基于centos7的jdk镜像制作

1、Dockerfile简介Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙2、Dockerfile基本结构Dockerfile由一行行命令语句组成, 并且支持以#开头的注释行,一般而言,Dockerfile主体内容分为四部分:基础镜...

2020-02-08 20:35:15 756

原创 Docker之数据卷容器

什么是数据卷容器如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器;数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载数据卷容器相关操作1.新建数据卷容器docker run -di --name db_data -v /db_data centos:7#-v后面接的共享数据真实存放路径2.用容器db1、db2测试数据卷容器是否...

2020-02-08 17:16:29 245

原创 Docker之数据卷

数据卷(Data Volumes)数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器,它可以提供很多有用的特性:1.数据卷可以在容器之间共享和重用2.对数据卷的修改会立马生效3.对数据卷的更新,不会影响镜像4.数据卷默认会一直存在,即使容器被删除数据卷相关操作1.创建数据卷docker volume creat...

2020-02-08 17:06:04 124

原创 Docker宿主机和容器之间文件拷贝

Docker数据管理在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作容器中的管理数据主要有两种方式数据卷(Data Volumes):容器内数据直接映射到本地主机环境数据卷容器(Data Volume Containers ):使用特定容器维护数据卷最原始的copy方式管理数据(基本不用)宿主机文件...

2020-02-08 14:59:50 225

原创 操作Docker相关命令

1、Docker基本命令#启动Dockersystemctl start docker#停止Dockersystemctl stop docker#重启Dockersystemctl restart docker#开机启动Dockersystemctl enable docker#查看Docker概要信息docker info#查看Docker帮助文档dock...

2020-02-07 22:28:11 108

原创 Docker入门

1、Docker简介Docker是一个开源的应用容器引擎,基于Go语言 并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。Docker从17.03版本之后...

2020-02-07 21:36:27 1268

原创 SPA项目开发之tab页实现

实现思路及细节:1、利用Vuex的知识定义几个变量Options:存放tab页对象的容器(主要是路由路径以及tab页的名字)activeIndex:被激活的tab页路由路径showName:tab页的标题Role:用来区分是否是因为左侧菜单被点击造成的路由路径发生改变(是:pass、不是:nopass)2、左侧导航菜单绑定点击事件将被点击的菜单名称存放到Vuex中,供路...

2020-02-04 15:15:44 341

notebooksystem.zip

这是我日常练习的记事本系统项目的源码,使用了springboot、MySQL、mybatis、Lucene等技术

2019-11-26

二维码生成所需jar包.zip

此资源是Qrcode的jar包,用于java生成和解析二维码

2019-06-20

jQuery选择器总结

jQuery是一个JavaScript类库,其中的选择器特别强大,可轻易选择需要的元素,这里简单地总结了一下

2018-10-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除