自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 MySQL执行计划 EXPLAIN

介绍MySQL优化器在基于成本、规则对SQL语句优化后,会生成一个执行计划。执行计划展示了执行SQL查询的具体方式。使用起来比较的简单,在SQL语句前添加EXPLAIN关键字并执行即可。当然,EXPLAIN不仅可以加在SELECT 语句前面,也可以加在DELETE、INSERT等等语句前面。不过查看查询语句还是最主要的。以EXPLAIN SELECT * FROM t_test为例,从结果中我们可以看到很多字段:搞清楚每个字段什么意思,知道了SQL的执行顺序,方便为自己的SQL进行优化。id查

2021-01-15 16:34:17 149 1

原创 MySQL中的锁

什么是锁?锁是协调多个进程或线程并发访问某一资源的一种机制。解决并发事务带来的问题并发事务访问相同记录的情况大致可以分为3种:读 - 读读操作不会对数据有任何影响,也不会引发什么问题。该情况可以忽略。写 - 写多个未提交的事务对同一条数据对修改操作,需要让他们排队执行。这个排队本质就是通过为该记录加锁来实现。读 - 写 或 写 - 读在该情况下,会出现脏读、不可重复读、幻读。SQL 92 标准规定,不同的隔离级别有如下特点:RU隔离级别下,脏读、不可重复读、幻读都可能发生

2021-01-14 16:44:42 182

原创 MySQL数据库四种事务隔离级别

事务的特性一组批量的SQL语句(insert,update,delete)执行来操作数据库数据,使用事务来处理,保证数据的完整性,要么全部执行,要么全部不执行。这组批量SQL可视为一个完整的逻辑处理工作单元。比如:转账,借钱的批量更新操作,删除用户所有信息级联删除的操作。那么事务应满足四个条件(ACID):原子性-Atomicity事务作为一个整体(不可分割的工作单元),要么全部成功(commit),要么全部失败(rollback)。不可能只执行其中的一部分操作。一致性-Consiste

2021-01-08 16:58:07 274

原创 MySQL存储引擎

介绍MySQL的核心架构大致如下。官方的图:以JDBC客户端为例画个草图:MySQL的存储引擎有很多,我们可以通过SQL查询,查看自己当前版本的MySQL支持的所有存储引擎。SHOW ENGINES;我之前安装在服务器上的MySQL版本为:5.7.x以MySQL5.7版本简单介绍一下常用的几种存储引擎。MyISAM在MySQL 5.5版本之前,MySQL的默认存储引擎。是ISAM的改良版。特点:存储使用MyISAM存储的表,有三个文件:.frm表信息文件.M

2021-01-06 17:11:51 114

原创 关系型数据库设计三范式

介绍关系型数据库,遵从一定的规则(范式),建立数据冗余较小,结构清晰合理的数据库。不同的规则为不同的范式,各种范式呈递次规范。目前的关系型数据库有六种范式:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BCNF(巴斯-科德范式)、4NF(第四范式)、5NF(第五范式、完美范式)。通常情况下,数据库满足第三范式就可以了。常见关系型数据库:MySQL、Oracle、SQL Server、DB2等等常见非关系型数据库:MongoDB、Redis、Memcached、HBase、Ca

2021-01-05 15:57:16 228

原创 Spring Boot 整合Redis Sentinel(1主2从3哨兵)

介绍在前面的博客中已经介绍了如何搭建Redis集群(最简单的Redis集群:1主2从3哨兵)Redis Sentinel 故障转移Redis 主从配置上面的配置虽然可以在服务器上面模拟测试成功,但是在整合到Spring Boot项目中,还是出现了一些小坑。本来准备直接在原博客上面改,但是考虑到更改后与当时的截图不一致,就在这里重新补充。Redis集群配置这里就只贴配置文件,配置项与原来无太大区别,仅仅是在从服务器,哨兵绑定的主服务器中的IP,改成真实的公网IP,不要使用localhost,或者1

2020-12-29 16:37:16 740

原创 记一次愚蠢的Redis配置导致Linux服务器被恶意攻击

起因之前Linux服务器上面一直启的Redis单机,并设置了密码。也没出现过问题。对安全这方面也不太敏感。前天重新搭建了Redis集群(一主两从三哨兵),都只是做了最简单的配置,期初master配置中是有密码的,但是在配置slave时,没有添加masterauth配置项(因为无知,- -!),导致主从复制一直失败,索性就把master中的requirepass给注释掉了。再次重启主从复制成功了,哨兵的配置也成功启动,发现模拟故障转移也莫得问题,就认为万事大吉了。经过然而昨天中午的时候,收到了阿里云的

2020-12-23 17:32:50 769 4

原创 Redis Sentinel故障转移

Redis SentinelRedis Sentinel配置主从复制的功能,针对主服务器(master)出现任何问题导致下线,进行故障转移。Redis Sentinel会监视一系列主服务器及主服务的从服务器,通过向主服务器发送publish命令和subscribe命令,并向主服务器和从服务器发送ping命令,各个Sentinel可以自主识别其他的Sentinel和其他可用的从服务器。当主服务器失效的时候,监视这个主服务器的所有Sentinel会基于彼此共有的信息选出一个Sentinel,并从现有可用的

2020-12-21 14:55:55 1080 1

原创 Redis主从复制

主从复制关系型数据库通常会使用一个主服务器(master),向多个从服务器(slave)发送更新,并使用从服务器来处理所有的读请求。Redis也采用了同样的方式来实现自己的复制特性,并将其用作扩展性能的一种手段。配置项从服务器任然可以配置不同的选项来控制自身的行为,但是开启从服务器的配置项只有一个:slaveof host port 开启从服务器比如:slaveof 127.0.0.1 6379 可以在客户端直接输入,也可以配置在redis.conf配置文件中启动时加载。slaveof

2020-12-17 16:45:46 151

原创 Redis 持久化

持久化持久化顾名思义就是将内存中的数据写入硬盘中。Redis提供了两种不同的持久化方法来将数据存储到硬盘中:RDB、AOF。这两种持久化方案既可以同时使用,又可以单独使用。甚至都不使用。具体根据应用和用户数据来决定。RDBRDB也称为快照。将某一时刻,Redis内存中的所有数据都写入硬盘中。从Redis根目录中的redis.conf文件中,我们可以看到详细的配置及说明。配置项save 900 1Will save the DB if both the given number of s

2020-12-16 17:48:13 113 2

原创 Spring Boot+Spring Cache使用Redis缓存

Spring CacheSpring Cache用于对主流的缓存组件(Redis,EhCache,GuavaCache,JCache等)进行集成,提供统一的,基于注解的缓存功能(利用Spring AOP特性)。常用注解:@Cacheable一般使用在查询方法。方法的返回值会被缓存。下一次查询,会先检查缓存中是否存在:如果有,则直接返回,不再调用方法体;如果没有,则调用方法,然后把结果放入缓存。value与cacheNames本质相同,定义缓存名称key:设置key。keyGener

2020-12-15 19:28:17 267

原创 1.在Spring中使用Redis

Spring中使用Redis介绍在之前的博客中介绍了如何在Linux下安装Redis。这里做一个简单的配置直接上手使用。Linux下安装Redis安装完以后,直接修改redis.conf文件中做一个简单的配置(修改前先备份,好习惯)。图daemonize yes:开启后台运行,默认为false。port 6379:默认端口6379logfile /root/redis.log:Redis日志文件databases 16:Redis数据库数量,默认的为16个。下标从0-15

2020-12-14 18:35:54 367

原创 13.Spring Cloud Alibaba Seata分布式事务使用入门(二)

更正问题上篇博客Spring Cloud Alibaba Seata分布式事务使用入门介绍了事务的ACID特性,分布式CAP原则,以及分布式事务常见解决方案。这篇博客做一些在使用阿里的开源分布式组件Seata的一些补充。本着实事求是的态度,今天上午又巴拉巴拉的翻阅了Seata官网的博客,查看了别人使用nacos作为seata服务端的配置中心,导入的nacos中的结果跟我上篇博客中的一致。这里更正上篇博客中自己误认为nacos导入脚本存在问题导致导入配置错误。在Seata官网的博客中,也找到了关于fil

2020-12-10 14:11:43 86

原创 12.Spring Cloud Alibaba Seata分布式事务使用入门

事务四大特性一组批量的SQL语句(insert,update,delete)执行来操作数据库数据,使用事务来处理,保证数据的完整性,要么全部执行,要么全部不执行。这组批量SQL可视为一个完整的逻辑处理工作单元。比如:转账,借钱的批量更新操作,删除用户所有信息级联删除的操作。那么事务应满足四个条件(ACID):原子性-Atomicity事务作为一个整体(不可分割的工作单元),要么全部成功(commit),要么全部失败(rollback)。不可能只执行其中的一部分操作。一致性-Consist

2020-12-08 23:09:19 1190

原创 11.Spring Cloud Gateway 网关使用入门

Spring Cloud Gateway介绍网关的作用这里就不重复了。Spring Cloud Gateway是Spring官方自己开发的网关。提供统一的路由方式,并基于Filter链的方式提供网关的功能(安全、监控、限流等)。其目标是替代Zuul。与Spring Cloud整合的Zuul(1.x版本)不同的是,Spring Cloud Gateway是基于Netty运行。依赖Spring Boot 2.0和Spring WebFlux(Spring 5.0),它本身并不兼容Servlet,无法打wa

2020-12-05 19:25:04 134

原创 10.Spring Cloud Alibaba Nacos(二) 配置中心

Nacos 配置中心在前面的博客中介绍了Nacos作为服务注册中心的使用。也介绍了Spring Cloud Config作为配置中心的使用。快捷链接:8.Spring Cloud Alibaba Nacos(一) 服务注册中心6.Spring Cloud Config 配置中心在介绍Spring Cloud Alibaba Nacos作为注册中心中,是将Nacos部署的为单机模式。这里做一下扩展。单机模式并使用MySQL作为数据源(这里以Linux服务器演示)进入解压的nacos文件夹

2020-12-03 15:12:37 189 2

原创 9.Spring Cloud Alibaba Sentinel流控熔断组件

SentinelSentinel 是面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。GitHub:Sentinel官网:SentinelSentinel 功能和设计理念流量控制任意时间到来的请求往往是不可控的,而系统的处理能力是有限的。这就需要根据系统的能力对流量进行控制。流量控制有一下几个角度:资源的调用关系(资源的调用链路,资源与资源之间的关系等)运行指标(QPS、线程池、系统负载等)控制的效果

2020-12-02 19:42:23 309

原创 8.Spring Cloud Alibaba Nacos(一) 服务注册中心

简介Spring Cloud Alibaba虽然是Spring Cloud的子项目,但其提供了更强大,更易用的一站式解决方案。服务发现 - Nacos服务调用 - OpenFeign / Dubbo / gRPC路由网关 - Gateway配置中心 - Nacos消息驱动 - RocketMQ流量控制 - Sentinel分布式事务 - SEATA分布式任务调度 - SchedulerX分布式存储 - OSSSpring Cloud Aliba

2020-12-01 16:26:30 121

原创 7.Spring Cloud Sleuth 整合Zipkin 服务链路跟踪

Spring Cloud SleuthSpring Cloud Sleuth 是服务跟踪组件,通过日志提供服务之间调用链路数据。Spring Cloud Sleuth数据格式:[微服务名称,TraceId,SpanId,导出标识]TraceId是一条服务链路上的唯一标识,SpanId则为步骤id。我们只需要在各个微服务中引入Spring Cloud Sleuth的maven依赖,从输出日志中即可查看。这里以服务A调用服务B,服务B调用服务C为例,在这三个服务中分别加入Spring Cloud Sl

2020-11-26 15:04:38 102

原创 6.Spring Cloud Config 配置中心

配置中心顾名思义,配置中心的作用就是集中管理所有环境中微服务的配置文件。配置中心从GitHub,或国内的码云仓库中获取配置文件,其他应用从配置中心里面获取获取对应的配置文件。创建配置中心 config-service使用Idea快捷创建,勾选Config Servermaven依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cl

2020-11-25 17:23:37 90

原创 5.Spring Cloud 网关Zuul使用入门

5.Spring Cloud 网关Zuul使用入门简介Zuul是Netflix开源的网关,能够与Eureka、Ribbon、Hystrix 等组件配合使用(都是自家的)。其核心是过滤器,使用这些过滤器我们可以:动态路由、请求监控、认证鉴权、压力测试、灰度发布。从使用角度,为全部服务提供了统一的入口,保障后台服务安全性的同时,使后台服务与客户端解耦。上手使用Idea快捷创建Spring Boot 项目,除去勾选Spring Web,Eureka Discovery Client外,额外勾选Zuu

2020-11-25 13:49:08 142 2

原创 4.Spring Cloud 熔断 Hystrix使用入门

微服务雪崩效应服务与服务之间相互通信(调用),随着业务扩展,客户端访问的服务(A)可能会调用多个服务(A调用B,B调用C…),如果其中被调用的某个服务©由于挂掉或超时等各种原因,不能再提供服务,那么B服务将处于阻塞状态,随着请求的增多(A的调用,B的重试),容器的线程资源会消耗完毕,B服务也挂掉了,接下来服务A也会重复B的操作,A资源耗尽也被挂掉,最终整个服务都无法再访问。概括的来说,服务提供者的不可用导致服务消费者不可用,并将不可用逐渐放大的过程。从百度又偷了张图。HystrixHystrix也

2020-11-19 20:18:19 191

原创 3.Spring Cloud 声明式服务调用 OpenFeign使用入门

前言上一篇博客中展示了使用RestTemplate,进行服务与服务之间的调用,并结合@LoadBalanced注解在客户端实现负载均衡。这里展示如何更加优雅的使用OpenFeign声明式服务调用。先大概了解一下Feign与OpenFeign有什么区别。Feign与OpenFeignFeignFeign是Spring Cloud组件中基于RestFul的HTTP服务客户端Feign内置Ribbon,同RestTemplate+@LoadBalanced效果一样在客户端做负载均衡。使用Feig

2020-11-19 13:26:36 205

原创 2.Spring Cloud Ribbon 负载均衡使用入门

什么是负载均衡负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)就是分摊到多个操作单元上进行执行。负载均衡又分为硬件负载均衡和软件负载均衡。硬件负载均衡:在服务器节点间安装用于负载均衡的设备,比如F5。软件负载均衡:在服务器上安装一些用于负载均衡的软件,比如Nginx,LVS。客户端负载均衡Spring Cloud Ribbon 是一个基于 HTTP 和

2020-11-18 18:06:40 100

原创 1.Spring Cloud 服务注册与服务发现之Eureka使用入门

服务注册与服务发现Spring Cloud中默认支持三种EurekaEureka是Netflix开发的服务发现框架,本身是一个基于REST的服务。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。CAP理论中的AP。ConsulConsul是一个高可用的分布式服务注册中心,由HashiCorp公司推出,Golang实现的开源共享的服务工具。CAP理论中的AC。ZookeeperZooKeeper是一个分布

2020-11-17 19:19:11 334

原创 初识Spring Cloud

微服务来自Spring官方的介绍:Microservice architectures are the ‘new normal’. Building small, self-contained, ready to run applications can bring great flexibility and added resilience to your code. Spring Boot’s many purpose-built features make it easy to build and

2020-11-17 13:39:46 102

原创 8.Spring Boot 打包与热部署

热部署Spring Boot提供了DevTool。直接在pom.xml文件中添加配置。添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId></dependency>在maven插件依赖中新增<build> <plugins>

2020-11-12 13:17:23 403 5

原创 7.Spring Boot 整合MyBatis并添加Druid连接池

整合Mybatis使用Idea中的Spring Initializr快捷创建Spring Boot项目,在创建的过程中勾选MySQL Driver选项(这里使用的MySQL数据库做展示),但不要勾选MyBatis选项。如果没有勾选MySQL,pom.xml文件中就没有MySQL的驱动,没关系,这里直接添加也行。<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector

2020-11-11 13:52:00 396

原创 6.Spring Boot 嵌入式容器

嵌入式Servlet Web容器ServletTomcatJettyUndertow2.56.x6.x-3.07.x7.x-3.18.x8.x1.x4.09.x9.x2.x使用Tomcat从Spring Boot 项目的pom.xml文件中我们可以看到如果是spring-boot-starter-web默认依赖的有spring-boot-starter-tomcat从项目运行的日志中,我们也可以看到,启动的是Tomcat。

2020-11-10 13:02:13 209

原创 5.Spring Boot添加Filter过滤器

添加过滤器方便规范管理,我们直接在项目下新建filter文件夹,并创建类。此处名字就随意一点了。创建自定义Filter实现javax.servlet.Filter接口重写doFilter方法。添加@Component注解@Slf4j@Componentpublic class TestFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws Servle

2020-11-09 19:18:17 464 1

原创 4.Spring Boot 自定义配置

自定义配置application.yml中我们还可以定义自己需要的配置。举个例子,假如我这里需要配置一个日志埋点的接口,在请求本系统中一些接口时,调用日志埋点接口插入日志。这里可以做一个AOP切面。后续讲解 这个。这里主要讲解配置日志埋点的接口的URL。这里,我们在application-dev.yml的配置文件中添加log.url=http://localhost:8081/log/insert注意:yml文件中:之前必须要有一个空格。配置文件中配置完成以后,我们直接在测试Controller中

2020-11-05 13:01:13 218

原创 3.Spring Boot 运行环境配置

运行环境除去我们自己使用的开发环境外,有测试环境,准生产环境,生产环境等等。那么在SpringBoot中,我们就会定义application-dev.yml,application-test.yml,application-prod.yml。当然这里只是举个例子,不同的环境名称直接 application-{环境名称}.yml即可。然后我们使用spring.profiles.active来指定不同的环境对应的配置文件。配置这里,我们只需要在application-dev.yml主配置文件中配置即可。

2020-11-05 10:58:46 954 1

原创 2.Spring Boot日志配置

日志规范详细的输出日志,有助于我们验证,排查程序出现的各种问题。日志级别:error > warn > info > debugSpring Boot 内置集成了SLF4j和LogBack。配置此处直接在application.yml配置文件中添加配置即可。刚刚在进行验证的过程中,发现同时设置了logging.file.path和logging.file.name以后设置的路径完全没有生效,app.log日志文件就生成在项目的根目录下面。并没有在设置的path路径中。查阅了文

2020-11-04 12:30:23 164

原创 1.Spring Boot 快速上手

Spring bootSpring Boot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。两大特性:开箱即用约定优于配置快速上手使用maven创建spring boot项目使用Spring Initializr创建约定如果有静态资源,放入/resource/static如果有前端页面等,放入/resource/templatesSpring boot的配置文件可以是properties文件,也可以

2020-11-03 13:05:11 294

原创 一步步教你使用Gradle编译Spring源码

背景前前后后折腾了两天,踩了不少坑。好在终于能够成功的编译。在办公的电脑上已经成功debug调试了,现在在家里的电脑上面重新再操作一遍,再记录到博客里面。演示版本IntelliJ IDEA 2019.3JDK1.8Gradle 4.10.3spring-framework 5.1.x别的版本照着一下的步骤做应该也没有太大问题。步骤先从GitHub上面拉取spring的代码。选择自己要看的spring的版本分支。此处先说明一下,因为每个版本Spring的Gradle版本不同,我这两天就

2020-10-28 22:21:51 3459 6

原创 使用Idea创建gardle项目

版本IntelliJ IDEA 2019.3gradle-6.6.1JDK1.8准备工作jdk1.8java -versiongradlegradle -v步骤

2020-10-27 20:35:48 131

原创 Gradle安装快速上手

下载Gradle官网

2020-10-22 11:31:28 308

原创 使用jsoup解析HTML,修改img标签的src属性

简介jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。(摘自百度百科)jsoup虽然支持爬取网页源码,但仅仅支持HTTP,HTTPS协议。所以大多还是用来解析HTML。查看了API发现用jsoup解析HTML可以是字符串,URL,文件。文档jsoup中文文档介绍本篇也是用jsoup解析HTML字符串内容,将里面的img标签中的src 的属性值给替换掉。使

2020-10-09 16:09:14 1866

原创 记一次重构,策略模式替换if else

FIRSTfor(CustomerResource customerResource : customerResourceList){//TODO //V1 //条件1 if(customerResource.getFactoryPrice().intValue() < -10){ condition1 = true; }else { continue;//条件1未满足,直接忽略 } //条件2 if(customerResource.getLastWeek

2020-09-25 22:21:14 509

原创 因多用了一次循环,趁机反驳了前端小哥

{ "list": [ { "goodsName": "good1", "goodsCode": "001", "price": 213 }, { "goodsName": "good2", "goodsCode": "002", "price": 240 }, { "goodsName": "good2", "goodsCode": "002", "price": 255 }, { "goodsName": "good3", "goodsCode": "003", "p

2020-09-24 22:13:44 110

空空如也

空空如也

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

TA关注的人

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