自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6. Nginx实现动静分离

简介把动态请求跟静态请求通过Nginx给分离出来,让不同的请求访问不同的内容,可以理解成使用Nginx处理静态页面,使用Tomcat处理动态页面。通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数,可以设置浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去 服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果是经常发生变化的

2020-11-25 06:14:50 4

原创 5. Nginx实现负载均衡

实现效果浏览器地址栏输入地址 http://192.168.2.190/edu/a.html ,将请求平均分发到 8080 和 8081 端口中具体实现首先启动两台tomcat服务器,一台8080,一台8081在两台 tomcat 里的 webapps 目录中,创建 edu 文件夹,在 edu 文件夹中创建页面 a.html为nginx.conf添加负载均衡的配置upstream myserver{ server 192.168.2.190:8080; s

2020-11-24 20:09:43 5

原创 docker-compose

配置将docker-compose放到/usr/local/bin/目录下为docker-compose赋予权限chmod u+x /usr/local/bin/docker-compose在/usr/local/下创建docker文件夹mkdir docker进入docker文件夹,创建tomcat文件夹mkdir tomcat进入tomcat文件夹,创建docker-compose.yml,编写配置version: '3.1'services: # 服务名

2020-11-24 12:17:48 4

原创 4. Nginx配置反向代理

访问过程分析反向代理示例1实现效果打开浏览器,在浏览器地址栏输入地址 www.123.com ,跳转到 liunx 系统 tomcat 主页面中具体实现修改windows的hosts文件,位置在C:\Windows\System32\drivers\etc,添加域名和 ip 对应关系的配置# 前面是你要连接的ip地址,后面是你要访问的网址192.168.2.190 www.123.com在Nginx中进行请求转发的配置server_name 192.168.2.190;

2020-11-23 16:46:41 14

原创 3. Nginx常用命令和配置文件

常用命令以下命令都需要在/usr/local/nginx/sbin 目录下执行# 查看Nginx版本号./nginx -v# 启动./nginx# 停止nginx./nginx -s stop# 重新加载./nginx -s reload配置文件位置/usr/local/nginx/conf/nginx.confnginx文件由三部分组成全局块从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令比如:worker

2020-11-22 05:56:10 7

原创 2. Nginx安装

安装pcre# 1) 下载安装包wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz# 2) 解压tar -xvf pcre-8.37.tar.gz# 3) 拷贝到其它目录cp -r pcre-8.37 /usr/local/# 4) 进入pcre-8.37目录,执行./configure# 5) 安装,如果报下面这个错误,需要先执行一下autoreconf -ivf,再执行m..

2020-11-21 16:09:39 14

原创 1. Nginx简介

Nginx概述Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,有报告表明Nginx最多支持50000个并发连接数。正向代理在大陆,如果要访问一个网址,假设是谷歌,是无法访问的,需要在客户端(浏览器)配置代理服务器,通过代理服务器来访问,这种代理服务就称为正向代理。Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。反向代理我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获

2020-11-21 06:22:36 5

原创 19. Mycat全局序列

简介无论分多少个节点,id不可能重复,这就是全局序列三种方式本地文件在Mycat建一个文件,专门存second序列,假设初始值为1,每当有insert语句执行时,使其+1,无论分到哪个数据节点都不会重复。Mycat部署的服务器,一旦宕机,这个文件就无法读取,即使有备机,也无法使用,抗风险能力较差,不推荐。数据库方式利用数据库一个表来进行计数累加,但是并不是每次生成序列都读写数据库,这样效率太低,Mycat会预加载一部分号段到Mycat的内存中,这样大部分读写序列都是在内存中完成的。如

2020-11-20 12:36:42 8

原创 18. Mycat分表

基础分表修改schema.xml,先分订单表<table name="orders" dataNode="dn1,dn2" rule="mod_rule" ></table>2. 修改rule.xml,指定规则<mycat:rule xmlns:mycat="http://io.mycat/"> <tableRule name="mod_rule"> <rule>

2020-11-20 05:37:02 8

原创 17. Mycat分库

分库原则拆成两个库的数据表,一定不能有关联查询需要两个空的库,用Mycat做分库的操作测试修改配置文件schema.xml<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <!--逻辑库 name名称, checkSQLschema

2020-11-18 22:07:23 25

原创 16. Mycat简介安装、读写分离

Mycat简介Mycat是一个数据库中间件,前身是阿里的cobar。Mycat功能读写分离从机可以单独做写操作,可以删除库表,因为从机有root用户,root用户有写权限,所以可以,如果要让从机不能写,只需要赋予用户读的权限即可。如果要用Java做读写分离,则需要配置两个数据源。配完数据源之后,当要执行与数据库相关的操作时,还需要做判断,如果是要做C、U、D这些写操作,则需要发给主机的数据库,如果是R这种读操作,则需要发给从机的数据库。一旦主机挂了、或者做切换的时候换别的机器了,则需要更改

2020-11-17 21:57:19 14

原创 15. MySQL主从复制

基本原理slave会从master读取binlog来进行数据同步master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log eventsslave将master的binary log events拷贝到它的中继日志(relay log)slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的基本原则每个slave只有一个master每个slave只能有一个唯一的服务器ID每个master可以有

2020-11-14 06:32:34 13

原创 14. 查询截取分析

慢查询日志MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL。long_query_time的默认值为10,意思是运行10秒以上的语句。使用默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启SHOW VARIABLES LIKE '%slow_query_log%';使用set global slow_q

2020-11-11 22:37:17 6

原创 13. SQL回顾的优化

# 1.列出自己的掌门比自己年龄小的人# 优化后,不需要建索引了select e.`name`,e.age,e1.`name`,e1.age from emp eleft join dept d on e.deptId = d.idleft join emp e1 on d.CEO=e1.idwhere e1.age<e.age;# 2.列出所有年龄低于自己门派平均年龄的人# 优化后select ed.deptName,e.`name`,age,ed.avgAge from emp

2020-11-10 06:10:25 6

原创 12. 排序、分组优化

1. 案例# 创建索引create index idx_age_deptid_name on emp (age,deptid,name)# 1. 无过滤,不索引# 单纯的添加索引无法解决using filesort,要想使索引生效,必须要添加过滤条件,哪怕是分页explain select SQL_NO_CACHE * from emp order by age,deptid; explain select SQL_NO_CACHE * from emp order by age,dep

2020-11-06 22:27:10 5

原创 11. 关联、子查询索引优化

关联查询优化1. 建表SQL# 关联查询优化CREATE TABLE IF NOT EXISTS `class` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`card` INT(10) UNSIGNED NOT NULL,PRIMARY KEY (`id`));CREATE TABLE IF NOT EXISTS `book` (`bookid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`car

2020-11-04 06:31:00 10

原创 10. MySQL单表索引优化

1. 全值匹配我最爱where后面有多少个筛选字段就建多少个索引2. 最佳左前缀法则从索引的第一个字段开始,从左到右,依次命中,不能跳过索引中的任何一列,一旦跳过某个字段,会导致后面的字段都无法使用以下面这个为例,虽然可以正常使用,但是只有部分被用到了这个就是完全没用上索引3. 不在索引列上做任何操作为索引字段添加函数、运算、(字段or手动)类型转换都会导致索引失效案例一、案例二、4. 范围字段放最后如果范围查询的字段右边还有其它字段则会导致索引失效以下面

2020-11-02 22:48:48 16

原创 9. MySQL批量操作数据

1. 建表 CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, ceo INT NULL , PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `emp`

2020-11-01 12:04:49 8

原创 8. MySQL之Explain

8.1 简介使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,分析查询语句或是表结构的性能瓶颈。8.2 各字段解释id*id作为select查询的序列号,包含一组数字,通常用来表示查询语句表的读取顺序三种情况id相同执行顺序从上到下id不同如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id相同与id不相同,同时存在衍生 = DERIVED在所有组中,id值越大,优先级越高,越先执行;id如果相同,

2020-10-31 12:34:45 21

原创 7. MySQL索引分类

7.1 单值索引即一个索引只包含单个列,一个表可以有多个单列索引7.2 唯一索引索引列的值必须唯一,但允许有空值7.3 主键索引设定为主键后数据库会自动建立索引,innodb为聚簇索引7.4 复合索引即一个索引包含多个列7.5 语法# 查看索引show index from table_name\G;# 删除索引drop index [indexName] on mytable;# 随表一起创建create table customer( ... key(

2020-10-26 21:05:17 14

原创 6. MySQL索引结构

6.1 简介索引(Index)是帮助MySQL高效获取数据的数据结构。也可以理解为排好序的快速查找数据结构6.1.2 分析以上图为例:左边是数据表,最左边的是数据记录的物理地址,为了加快Co2的查找,可以维护一个像右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。6.1.3 优势类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本通过索引列对数据进行排序

2020-10-25 22:51:33 14

原创 5. SQL回顾

5.1 Join5.2 SQL回顾#准备工作CREATE TABLE `t_dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `t

2020-10-24 20:28:16 35

原创 4. MySQL存储引擎

4.1 查看命令 # 查看当前mysql提供的存储引擎:mysql> show engines;# 查看当前MySQL默认的存储引擎mysql> show variables like '%storage_engine%'4.2 引擎简介1、InnoDB存储引擎*InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。2、MyISAM存储引擎*MyI

2020-10-23 10:55:13 14

原创 3. MySQL杂项配置与底层架构

3.1 杂项配置3.1.1 sql_modesql_mode是个很容易被忽视的变量,默认是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生成环境下必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置。这样在开发测试阶段就可以发现问题。show varibles like 'sqlmode';3.2 底层架构3.2.1 利用show profile 查看sql的执行周期修改配置文件vim /etc/my.cnf,在最后加上中文字符集配置query

2020-10-22 16:35:04 18 1

原创 2. MySQL字符集、权限问题

2.1 MySQL5.7直接插入中文数据报错修改配置文件vim /etc/my.cnf,在最后加上中文字符集配置character_set_server=utf8重新启动mysql已生成的库表字符集需要修改数据库的字符集mysql> alter database mydb character set 'utf8';修改数据表的字符集mysql> alter table mytbl convert to character set 'utf8';2.2

2020-10-22 14:48:41 11

原创 1. Linux安装MySQL5.7.16

1.1 检查工作CentOS7,执行安装命令前,先执行查询命令rpm -qa|grep mariadb如果存在如下:需要先执行卸载命令:rpm -e --nodeps mariadb-libs检查当前mysql依赖环境rpm -qa|grep libaio如果存在libaio包如下:rpm -qa|grep net-tools如果存在net-tools包如下:如果不存在可以使用yum安装检查/tmp文件夹权限由于mysql安装过程中,会通过mysql用户在/tmp目

2020-10-18 22:36:09 9

原创 7. MyBatis-Plus代码自动生成器

7.1 简介AutoGenerator 是 MyBatis-Plus的代码生成器,通过 AutoGenerator 可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。7.2 测试pom.xml <!-- MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖 --> <dependency> <groupId>o

2020-10-18 12:33:18 24 1

原创 6. MyBatis-Plus条件构造器

6.1 Wrapper简介复杂的SQL,需要使用它来替代,涵盖了MyBatis中所有的SQL条件…等等6.2 测试@SpringBootTestpublic class WrapperTest { @Autowired private UserMapper userMapper; /** * 测试一:查询name不为空、邮箱不能为空、年龄大于等于21的用户 */ @Test void contextLoads() {

2020-10-17 22:37:24 9

原创 5. MyBatis-Plus性能分析插件

5.1 简介作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间MP提供的性能分析插件,如果超过这个时间就会停止运行5.2 使用导入插件public class MyBatisPlusConfig { /** * SQL执行效率插件 */ @Bean // 设置dev test环境开启,保证运行效率 @Profile({"dev","test"}) public PerformanceInterceptor testPer

2020-10-17 06:24:52 51

原创 4. MyBatis-Plus CRUD扩展

4.1 插入 @Test public void testInsert(){ // id即使为空也会自动填写 System.out.println(userMapper.insert(new User(null, "qnu", 23, "qnu@qq.com"))); }4.1.2 主键生成策略默认全局唯一id@TableId(type = IdType.ID_WORKER)分布式系统唯一id生成雪花算法*:snowflake是Twitter

2020-10-15 23:04:53 24 1

原创 3. Mybatis-Plus配置日志

在application.properties中添加此配置,即可知道sql是怎么执行的# 配置日志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

2020-10-15 05:57:29 10

原创 2. Mybatis-Plus快速入门

2.1 环境配置创建数据库mybatis_plus创建user表,并添加数据DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50

2020-10-15 05:52:05 20

原创 1. MyBatis-Plus简介

1.1 简介MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变。1.2 特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式

2020-10-15 05:35:20 7

原创 15. 缓存穿透与雪崩

15.1 缓存穿透15.1.1 概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据没有,也就是缓存没有命中,于是向数据库查询,发现也没有,于是本次查询失败,当用户很多的时候,缓存都没有命中(例如秒杀),于是都去请求数据库,这会给数据库造成很大的压力,这就相当于缓存穿透15.1.2 解决方案布隆过滤器布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力当存储层不命中后,即使返回的空对象,也将其

2020-10-13 21:26:21 18

原创 14. Docker配置Redis哨兵模式

14.1 简介哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理就是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。也就是主从切换的升级版,能够后台监控主机是否故障,如果故障了则根据投票数自动将从库转换为主库这里的哨兵有两个作用:通过发送命令,让Redis服务器返回并监控其运行状态,包括主服务器和从服务器当哨兵检测到master宕机,会根据投票自动将slave切换成master,然后通过发布订阅模式通

2020-10-11 12:45:40 18

原创 13. Redis主从复制

13.1 简介主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower)数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有),但是一个从节点只能有一个主节点。主从复制的主要作用:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式故障恢复:当主节点出现问

2020-10-10 23:02:20 22

原创 12. Redis集群环境搭建

12.1 环境配置只配置从库,不用配置主库12.1.1 查看当前库的信息127.0.0.1:6379> info replication# Replication# 角色role:master# 没有从机connected_slaves:0master_replid:af727c02bc54cbd7403a8c0d239d7497821ed504master_replid2:0000000000000000000000000000000000000000master_repl

2020-10-07 21:56:16 352

原创 11. Redis发布订阅

11.1 简介Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。比如:微信、微博的关注系统!Redis 客户端可以订阅任意数量的频道。第一个:消息发送者, 第二个:频道 第三个:消息订阅者!下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三

2020-10-06 11:57:12 20

原创 10. Redis持久化之AOF

10. AOF(Append Only File)将所有的命令都记录下来,类似histrory的操作, 恢复的时候会将这个文件全执行一遍10.1 简介以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换一种说法,redis重启的话,就是根据日志文件的内容,将写指令从前到后执行了一次,才完成了数据的恢复。10.2 配置AOF首先修改配置文件中的appendonly yes进入

2020-10-05 21:57:55 1129

原创 9. Redis持久化之RDB

9.1 简介Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!9.2 RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复时将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,等持久化过程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了

2020-10-04 20:59:04 28

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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