自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis安装配置

在源码的src目录下有redis-server和redis-cli两个命令。server用来启动redis服务,cli用来命令行连接指定的redis服务。redis-server命令可以指定配置文件,还可以指定一些启动参数,像启动端口,密码等等。redis的配置文件在解压的目录下有一个redis.conf文件,可配置参数:参数是以key value的形式来配置对应参数。redis-cli默认连接本机6379上的redis服务,当然也可以指定要连接的redis服务地址。客户端连接时需要密码进行认证。

2024-06-24 21:53:22 205

原创 nginx开启目录索引搭建文件服务器

开启后就可以通过浏览器访问目录下的文件列表并且可以下载,像很多镜像资源站一样。这时候如果对某个目录不是所有用户可以访问下载,则可以使用ngx_http_auth_basic_module 模块开启限制资源访问。需要输入用户名密码认证获取范围权限。对于稍微大一点的文件,为了避免一个用户下载导致占用带宽过大,影像其它用户操作,可以配置文件下载时限制下载速度。auth_basic_user_file文件指定认证的用户密码。ngx_http_autoindex_module 模块可以支持目录列表浏览,开启方式。

2024-05-11 10:15:57 202

原创 nginx 负载均衡

负载均衡是指将来自客户端的请求分发到多个后端服务器上,以达到提高系统性能、增加可用性和实现水平扩展的目的。上篇文章讲反向代理的时候已经知道使用proxy_pass指令将客户端请求转发到一个后端服务器,这里转到多个服务器也就是实现负载均衡需要结合upstream命令。

2024-04-24 21:25:05 967

原创 nginx 反向代理

Nginx是一个高性能的开源Web服务器,同时也可以用作反向代理服务器。反向代理是一种服务器的行为模式,它接收客户端的请求,然后将这些请求转发给后端的服务器,最终将后端服务器的响应返回给客户端。这样做的一个常见用途是将客户端的请求分发给多个后端服务器,以实现负载均衡。

2024-04-10 21:38:10 1217 2

原创 nginx 日志配置

像一般的404,500错误都会记录在错误日志中,日志级别默认error就差不多了,没必要设置的太低,除非需要详细信息来进行调试。gzip[=level]:可选参数,表示是否启用 gzip 压缩日志文件,level 表示压缩级别,0 表示不压缩,1-9 表示压缩级别,默认为 1。format:是日志格式,日志格式可以使用log_format来定义,默认使用combined,是nginx内置的一种日志格式。name用来指定日志格式的名称,access_log指令使用的format就等于这里定义的名称。

2024-03-26 18:00:49 1049

原创 nginx rewrite重写

Nginx 的 rewrite 指令可以用来修改 URI的请求。通过 rewrite,你可以重定向 URL 请求、修改 URL 参数、或者根据特定条件进行URL跳转 等操作。Nginx 重写规则用于更改客户端请求的全部或部分URL。更改URL的主要目的是通知客户端他们正在查找的资源已经更改了位置。Nginx 中的return和rewrite指令是用来重写URL的。url重写可以使用rewrite、return、if、break、set几个指令来完成。

2024-03-22 15:55:55 882

原创 nginx location块配置

像location /test和location ^~ /test虽然规则符号不同,但是也被认为是相同的location。正则匹配也是经常用的一种配置方式,如location ~ .jpg$可以匹配所有的jpg图片文件请求,location ~ ^/user/\d+可以匹配所有以/user/[用户ID]开头的请求。选择匹配前缀最长的位置并记住。此时如果访问/test1则会直接进入location ^~ /test1,虽然后面的正则匹配location ~ /test[0-9]也可以匹配,但是。

2024-03-12 15:05:18 433

原创 nginx 安装配置

Nginx(“engine-x”)是一个高性能的开源 Web 服务器软件,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存。Nginx 的设计目标是提供高性能、稳定性和低资源消耗。

2024-03-06 17:05:53 934

原创 java 异常处理

也称为运行时异常(Runtime Exception),这类异常在编译时不强制要求进行处理,可以选择性地捕获和处理。jdk中已经定义了很多常见的异常,但是在系统开发的时候一般还是会自定义一些与业务相关的异常,用来区分不同的业务场景,使错误更明确。特别是在进行接口开发时。如果不想在当前代码块进行处理异常,可以将异常继续抛出到方法签名上,由调用该方法 的地方进行处理,方法异常抛出使用throws关键字,可以指定多个。使用throw抛出的异常,这里就是一种受检查异常,在被调用地方必须要进行代码显示的处理异常。

2024-03-05 20:09:18 368

原创 java generics(泛型)

泛型可以定义在类,接口和方法上。泛型使用 < >来指定泛型类型。如上,类变量flag在class定义时候指定为泛型,在对应使用泛型变量flag的地方都需要使用泛型进行接收和传递。

2024-03-04 21:50:08 787

原创 java 日期时间处理

java的日期时间处理,在java8之前主要使用Date和Calender类来进行构造,在java8后,在java.time包中引入了更多的类来处理日期时间。具有更好的可读性、易用性和线程安全性。

2024-03-01 16:43:18 1280

原创 java Annotation(注解)

在了解注解定义之前要首先来看下jdk提供的几个原注解,因为注解定义需要依赖这几个原注解。@Target指定注解适用的目标元素类型,包括类、方法、字段等。可以使用多个 ElementType 枚举值进行组合。ElementType 的枚举值:ElementType .TYPE:表示类或接口或注解上ElementType .FIELD:表示使用在字段属性上ElementType .METHOD:表示使用在方法上ElementType .PARAMETER:表示使用在参数上。

2024-02-29 15:59:31 842

原创 java I/O流操作

Java I/O(输入/输出)指的是Java编程语言中用于处理输入和输出的API。Java提供了丰富的I/O类和接口,可以用于读取和写入文件、网络通信、内存操作等。对于输入流InputStream的操作一般都是read进行读取操作,输出流OutStream是write、print这种进行输出写入操作。后面介绍的API方法都遵循这种方法定义。另外所有的流都实现了Closeable接口,一般在基类进行实现。当一个流不再使用时及时的关闭流是很有必要的。

2024-02-28 10:28:07 1129

原创 java 动态代理

在Java中,动态代理是一种代理模式的实现,代理是对被代理目标对象的一个包装,对目标对象的方法进行调用,不会直接调用目标对象,而是通过代理,这样代理在真实方法调用前后可以设置一些业务逻辑,而不用修改原始类的方法。

2024-02-27 17:04:50 321

原创 java reflection(反射)

Java反射是指在运行时动态地获取类的相关信息并进行操作的机制。java中一切皆对象,同样的对于一个class类文件,java同样可以提取出其对应的信息进行封装成不同的对象。反射的过程就是将class文件中的成员信息进行解析成对应类型的变量。对应成员类型在java.lang.reflection包下。主要有构造函数(Constructor),属性(Field),方法(Method),修饰符(Modifier)。

2024-02-27 10:06:08 964

原创 java RMI(远程方法调用)

java RMI(Remote Method Invocation)远程方法调用。为什么称为远程方法调用呢?因为是两个JVM间进行通讯。两个JVM一个作为服务提供端,另一个作为服务调用端。首先需要定义一个远程调用的接口,这个接口要继承Remote接口。并且远程接口方法要抛出RemoteException异常。然后在服务端进行RemoteService接口方法的实现。

2024-02-26 15:06:07 417

原创 java 序列化

Java 序列化是 Java 编程语言中用于将对象转换为字节流或将字节流转换回对象的机制。通过序列化,可以实现对象的持久化存储、网络传输以及跨平台数据交换。序列化后的字节流是平台无关的,因此一台机器的序列化数据在另一台机器上可以反序列化。对象要想可以序列化,首先要实现java.io.Serializable接口。这是一个标记接口,没有任何方法需要实现。实现Serializable接口后,可以使用ObjectOutputStream 类来进行生成字节流。

2024-02-26 10:53:15 481

原创 mysql 用户权限管理

mysql使用系统库mysql的user表来存储用户信息。mysql.user表详细的记录了用户名,对应的允许连接的主机信息还有各种全局权限标识位。

2024-02-23 17:00:48 1064

原创 mysql 数据备份与恢复

mysql数据库备份分为物理备份和逻辑备份两种,物理备份指将数据库data下的数据文件进行直接copy备份,逻辑备份指通过备份数据库的逻辑结构和数据。也就是数据库的对象对应的create语句和数据表的insert语句。这里主要说逻辑备份。

2024-02-22 17:46:51 1095 1

原创 mysql binlog

二进制日志文件记录了数据库修改的事件,像表的修改,表数据的变更等。也包含潜在的可能修改数据的语句事件。如一些delete或update最后修改的数据行可能是0,也会被记录在binlog中(和日志格式也有一定关系,非row-based)。除此之外binlog还会记录语句的执行时间信息。

2024-02-21 17:05:15 1077 1

原创 mysql redo log

redo log是innodb引擎特有的记录重做日志,用来进行崩溃恢复和事务的持久性。

2024-02-20 18:02:15 865

原创 mysql 数据库主从复制搭建

MySQL 主从复制主要用于实现高可用性和备份。在主从复制中,一个 MySQL 实例(称为主节点)将其数据更改复制到至少一个其他 MySQL 实例(称为从节点)上。主要借助于数据库二进制日志binlog进行数据的复制。主从数据库对应的操作系统、数据库版本要一致。

2024-02-19 16:08:21 1153

原创 mysql使用limit限制查询行数

原因是因为limit m,n不是只取n行数据,而是扫描m+n行,然后将前m行丢弃返回客户端n行。这个也好理解,按相同年龄排序,如果多个人同岁,只取其中几个,选取哪几个这个对于整条语句来说是无序的,只满足年龄排序接口,如果要保证每次查询返回结果相同,最好加上对应唯一值进行排序。如果distinct和limit row_count同时在查询语句中,在获取到满足distinct(唯一行)的row_count行后会立即结束查询。如果order by的列在多行有相同的值,如果使用limit每次返回的行可能不同。

2024-02-18 15:47:36 574

原创 mysql order by 排序原理

这里有一个参数max_length_for_sort_data,如果查询的数据行记录超过该值,则会采用sort_key, rowid模式,否则会采用sort_key, additional_fields模式。当涉及到大量数据时,对于 ORDER BY 操作,可以考虑为相应的列添加索引,如果不使用索引,mysql会使用filesort来进行排序。多列排序,第一列排序username满足使用索引条件,gender和username排序方向相反,无法使用索引,会进行依次filesort。为什么使用索引会快?

2024-02-06 17:48:28 959

原创 mysql 使用join进行多表关联查询

在常规业务开发(非高并发)进行表join操作是非常常见的,在表连接时候尽量使用小表驱动大表,这里的小表是指条件过滤后参加join条件的数据。它只返回两个表中匹配的行,即两个表中具有相同值的列的行。MRR处理过程是在根据索引获取到主键后不是立即进行回表查询,而是先将主键值放入到一个read_rnd_buffer中,然后对其进行排序,最后再有序的去聚簇索引检索行数据。2、将join buffer中的关联列值,批量的发送给引擎在被驱动表上通过MRR以最优的方式进行索引树搜索匹配,获取到对应的主键(rowId)。

2024-02-04 17:39:39 1895

原创 mysql 查询使用索引

前面文章介绍了InnoDB的索引结构是B+树。主键索引树上拥有所有行数据记录,使用索引可以提高数据库查询的性能和效率,加快数数据查询速度。

2024-02-02 15:51:12 1096

原创 mysql 使用profiling和explain来分析查询语句性能

通过执行计划,你可以了解到 MySQL 是如何选择索引、连接表以及访问行的顺序的。当连接使用索引的所有部分,并且索引是PRIMARY KEY或UNIQUE NOT NULL索引时,使用它。表示查询中执行的顺序,id相同从上到下按顺序执行,一般id越大优先级越高。会有三条执行计划信息,第一个查询是:PRIMARY,第二个查询是UNION,最后的结果集是UNION RESULT。1、如果判断可以使用索引进行条件过滤,走对应索引。一个索引可能左值匹配使用了部分,也可能是联合索引使用了其中的一部分。

2024-02-01 17:58:18 890

原创 mysql 一条查询语句执行过程顺序

优化器(Query Optimizer):对解析后的sql语句不同的执行计划进行评估,选择合适的执行计划来提高数据库执行效率。这个时候一些执行计划的统计及耗时记录是有存储引擎来完成的,优化器会和具体执行引擎进行交互来选择效率高的执行计划。mysql存储引擎是插件式的模式,用户可以方便使用不同的存储引擎,常见存储引擎InnoDB、MyISAM、Memory等。分析器(Query Parser):一条语句发送到服务端,首先会分析sql语句的语法是否正确,将整个语句解析成不同的部分,供后面执行使用。

2024-01-31 15:50:20 525

原创 mysql 事务隔离级别、索引与锁之间相互影响

前面的文章学习了索引、事务隔离级别和锁。这三者在不同组合下有不同的表现形式。1、这里说的锁侧重于行锁,首先还是列下锁的几种类型记录锁:X,REC_NOT_GAP间隙锁:X,GAP邻键锁:X插入意向锁:INSERT_INTENTION2、准备test表,其中id是主键,a列有唯一索引,b列普通索引,c列无索引。有以下值。

2024-01-30 15:57:20 440

原创 mysql 各种常见的锁

数据库锁是用来在并发时控制不同资源的访问策略。锁的分类可以从不同的角度划分有很多种不同的锁。1、按功能划分锁按功能划分大致分为两种共享锁(Shared Locks)和排它锁(Exclusive Locks)。共享锁也称为S锁、读锁。排它锁也称为写锁,X锁。共享锁允许事务读取一行数据。排它锁允许事务更新或删除一行记录。共享锁多个事务可以同时获得,但是一个事务如果想获取行上的排它锁必须要等待其它事务所有锁释放,包括共享锁和排它锁。2、按控制粒度范围划分。

2024-01-29 15:54:36 1326

原创 mysql MVCC(多版本并发控制)的实现原理

MVCC(multiversion concurrency control)多版本并发控制的意思。InnoDB是一个多版本存储引擎。会保留多个行记录修改的历史版本来支持事务的并发特性和回滚。MVCC是一种提高事务并发的一种技术,事务的一致性非锁定读(Consistent Nonlocking Reads)就是通过MVCC来实现。一致性非锁定读意思InnoDB使用多版本控制向查询提供数据库在某个时间点的快照数据。查询查看在该时间点之前提交的事务所做的更改。整个过程是无锁的。

2024-01-26 15:29:18 1176

原创 mysql 事务特性和隔离级别

事务的目的是保证数据库的数据一致性和完整性和隔离性。在关系型数据库中,事务是基于ACID模型的。在实际应用中,我们通常使用事务来执行一组对数据库的操作,以保证数据的正确性和完整性。这样数据就不会被破坏,结果也不会因软件崩溃和硬件故障等异常情况而扭曲。例如,在银行转账操作中,我们需要保证两个账户之间的转账操作是一个事务,要么同时成功,要么同时失败回滚。

2024-01-24 15:57:36 962

原创 mysql InnoDB行记录格式

在介绍索引的文章已经知道。InnoDB的表数据被拆分成不同的数据页上,默认一个数据页大小是16kb,分布在聚簇索引的叶子节点上。被挂在B+树上。一条行记录除了要保存每列具体数据值还会有一些标识位信息。另外对于超长数据存储也有特殊处理。那么具体到一行数据多个列数据是怎么组织的呢?InnoDB存储引擎提供4种行格式: REDUNDANT, COMPACT, DYNAMIC和COMPRESSED。

2024-01-22 17:02:11 1039

原创 mysql B+树索引

数据库索引用于提高查询性能和数据访问效率。索引可以加速数据的查找和筛选,减少查询的时间复杂度。数据库索引有很多类型,这里不展开也不比较,只介绍最常见一种索引结构B+树索引。mysql中InnoDB引擎默认使用的就是BTREE索引。

2024-01-19 15:45:35 1064

原创 mysql表的创建和修改

一个表有多个列组成。一个表最大允许4096个列,这已经很大了,实际情况单表使用的列远小于该值。每一个列定义有列名、类型和必要的约束组成。列名最好与业务相关有意义,尽量不要使用关键字。列类型:列类型前面有篇文章介绍数据类型,常见有整数型、浮点数、日期和字符类型。可以根据实际数据进行定义。对于字符串类型可以使用CHARACTER SET来指定当前列的字符集,如果没有明确指定则默认使用数据库的默认字符集。常见的字符集有utf8 和 utf8mb4。非空约束。

2024-01-17 10:32:49 924

原创 mysql 字符串处理函数

INSTR()和locate()方法意义相同,只不过两个参数顺序是相反的。hex十六进制转换:hex(n),hex(str)。获取字符串长度使用char_length()函数,length()函数获取字节长度,如果是汉字,字节长度和数据库字符集有关系。substr()、substring()两个函数作用相同。

2024-01-15 15:34:47 448

原创 mysql日期时间函数

只是两个表示的时间稍微有些差别,now()表示当前语句开始执行时间点,在一个语句中多次通过now()获取时间是相同的,sysdate()而是当前时点的时间,是一直在增加的。EXTRACT(unit FROM date)其中,unit表示要提取的时间单位,可以是MONTH、DAY、HOUR、MINUTE等,文章最后有unit的可选值列表。前面在一些时间函数中,如EXTRACT,TIMESTAMPDIFF,DATE_ADD中有unit时间单位参数,下面是一些时间单位的值选项说明。分别获取日期和时间部分。

2024-01-12 16:47:36 942

原创 mysql数据类型

2、所占空间不同,后面的+3个字节是表示可选的小数部分长度,这里datetime占5个字节是从5.6.4版本开始的,以前的版本占8个字节。timestamp是一个时间戳,从1970年到现在的秒数,一直在增加,为什么到2038年就到期了,因为达到一个4字节整数最大值。D可以不指定,默认是0,如decimal(5)就是表示5位整数,同样M也可以省略,默认是10。INT:4 字节,范围为 -2,147,483,648 到 2,147,483,647。默认情况下都是有符号整数,第一位是符号位。

2024-01-10 17:29:02 385

原创 springboot使用@ConfigurationProperties自动绑定配置参数属性

这里ConfigurationProperties会有两部分,一是框架通过autoConfig自动装配的,一种是我们自己显示使用@ConfigurationProperties修饰的bean。2、注册合适的ConfigurationProperties类型bean, 当前metadata是正在初始化的Configuration类,然后从其注解上获取带有EnableConfigurationProperties注解作为bean定义加载到容器中。除了在类上标注外,还可以在@Bean方法上。

2024-01-04 14:37:14 1233

原创 springboot application配置文件读取顺序

文件位置还是和上面的一致。默认情况下配置文件的名称为application,如果不想使用该文件名,可以通过spring.config.name参数来指定具体的文件名,一般也没人会改吧。这里看到先是通过processWithoutProfiles方法解析不带profiles的配置文件,然后通过processWithProfiles解析带profiles的配置文件,最后将解析到的配置文件设置到environment中。启动时会按照上面的顺序进行加载配置文件,如果存在多个,后面的会覆盖前面的配置项值。

2023-12-28 14:30:00 1225 1

空空如也

空空如也

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

TA关注的人

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