自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (4)
  • 收藏
  • 关注

原创 Shiro实现登录认证和权限认证(笔记,自己看的)

【代码】Shiro实现登录认证和权限认证(笔记,自己看的)

2023-07-30 18:32:35 208

原创 并发编程(1)

进程与线程进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等。线程一个进程之内可以分为一到多个线程。一个线程就...

2022-05-14 19:48:34 214

原创 RabbitMQ的基本使用

同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。1.同步通讯我们之前学习的Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:总结:同步调用的优点: 时效性较强,可以立即得到结果 同步调用的问题: 耦合度高 性能和吞吐能力下降 有额外的资源消耗 有级联失败问题 2.异步通讯异步调用则可以避免上述问题:我们以购

2022-05-11 08:12:59 9600

原创 Gateway网关的使用

为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。网关的核心功能特性: 请求路由 权限控制 限流 架构图:权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行

2022-05-09 20:26:22 2499

原创 feign的使用

Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier其作用就是帮助我们优雅的实现http请求的发送。Feign替代RestTemplate1.引入依赖我们在order-service服务的pom文件中引入feign的依赖:<dependency> <groupId>org.springframework.cloud&l

2022-05-09 18:54:33 1194

原创 Nacos配置管理

统一配置管理当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。1.在nacos中添加配置文件然后在弹出的表单中,填写配置信息:注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。2.从微服务拉取配置微服..

2022-05-09 16:50:06 498 1

原创 Nacos注册中心

服务注册到nacos1.引入依赖在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <ver

2022-05-09 15:11:04 93

原创 Eureka注册中心的使用

Eureka的结构和作用问题1:order-service如何得知user-service实例地址?获取地址信息的流程如下: user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫服务注册 eureka-server保存服务名称到服务实例地址列表的映射关系 order-service根据服务名称,拉取实例地址列表。这个叫服务发现或服务拉取 问题2:order-service如何从多个user-servi

2022-05-09 11:56:48 590

原创 Redis缓存穿透,缓存击穿,缓存雪崩

缓存穿透缓存穿透是指查询一个数据库一定不存在的数据。我们以前正常的使用Redis缓存的流程大致是:1、数据查询首先进行缓存查询2、如果数据存在则直接返回缓存数据3、如果数据不存在,就对数据库进行查询,并把查询到的数据放进缓存4、如果数据库查询数据为空,则不放进缓存例如我们的数据表中主键是自增产生的,所有的主键值都大于0。此时如果用户传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。程序就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有人恶意

2022-05-05 16:50:17 96

原创 MP学习笔记

字段自动填充需求描述:项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的creat_time,update_time等。我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作1.在User表中添加datetime类型的新的字段 create_time、update_time2.实体上增加字段并添加自动填充注解@TableField(fill = FieldFill.INSERT)private Date createTime; //create_

2022-04-25 15:40:17 233

原创 ZooKeeper学习笔记

什么是zk?Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。Zookeeper 提供的主要功能包括:配置管理分布式锁集群管理Zookeeper 数据模型ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似,拥有一个层次化结构。这里面的每一个节点都被称为: ZNode,每个节点上都会保存自己的数据和节点信息。 节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下...

2022-04-25 09:16:00 261

原创 nginx入门使用

部署静态资源Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。反向代理反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相

2022-04-21 21:32:52 156

原创 Dubbo学习笔记

Dubbo概念•Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。•致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。Dubbo架构•Provider:服务提供方•Container:服务运行容器•Consumer:服务消费方•Registry:服务注册与发现的注册中心•Monitor:统计服务的调用次数和调用时间的监控中心Zookeeper安装•Dubbo官方推荐使用Zoo...

2022-04-21 21:17:25 1735

原创 使用ShardingJDBC实现读写分离

数据库准备工作提前准备两台服务器,并且在服务器中安装MySQL,服务器的信息如下:数据库 IP 数据库版本 Master 192.168.200.200 5.7.25 Slave 192.168.200.201 5.7.25 主库配置1). 修改Mysql数据库的配置文件/etc/my.cnf在最下面增加配置:log-bin=mysql-bin #[必须]启用二进制日志server-id=200 #[必须]服务器唯一ID

2022-04-20 20:33:59 2958

原创 SpringCache框架的使用

介绍Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。针对不同的缓存技术需要实现不同的CacheManager:CacheManager 描述 EhCacheCacheManager

2022-04-20 20:10:05 945

原创 Redis中的数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:字符串(string):普通字符串,常用哈希(hash):适合存储对象列表(list):按照插入顺序排序,可以有重复元素集合(set):无序集合,没有重复元素有序集合(sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素字符串string...

2022-04-18 20:46:51 161

原创 Linux常用操作

Linux目录结构Linux系统中的目录有以下特点:A. / 是所有目录的顶点B. 目录结构像一棵倒挂的树Linux常用命令常用命令演示在这一部分中,我们主要介绍几个常用的命令,让大家快速感受以下Linux指令的操作方式。主要包含以下几个指令:在执行Linux命令时,提示信息如果显示为乱码,如上图所示。这是由于编码问题导致,只需要修改Linux的编码即可,命令如下:echo 'LANG="en_US.UTF-8"' >> /etc/profilesourc

2022-04-18 15:48:04 1476

原创 Git常用操作

什么是GitGit 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种: 本地仓库:开发人员自己电脑上的 Git 仓库 远程仓库:远程服务器上的 Git 仓库 使用Git能做什么 代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本 版本切换:Git存在分支的概念,一个项目可以有多个分支(版本),可以任意切换 多人协作:Git支持多人协作,即一个团队共同开发一个.

2022-04-16 21:49:20 472

原创 mysql读写分离

什么是读写分离?读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。一主一从MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制。schema.xml配置:负责均衡的参数balance,取值有4种,具体含义如下:在一主一从模式的读写分离中,balance配置1或3都是可以完成读写分离的。server..

2022-04-02 17:55:55 721

原创 mysql主从复制

概述主从复制是指将主数据库的DDL和DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。MySQL主从复制的优点主要包含以下三个方面:1.主库出现问题,可以快速切换到从库提供服务。2.实现读写分离,降低主库的访问压力。3.可以在从库中执行备份,以避免备份期间影响主库服务。原理MySQL主从复制的核心就是二进制日志,具.

2022-04-01 21:01:28 930

原创 mysql日志

错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为mysqld.log 。查看日志位置:show variables like '%log_error%';二进制日志二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但不包

2022-04-01 20:50:23 943

原创 mysql事务原理

我们研究事务的原理,就是研究MySQL的InnoDB引擎是如何保证事务的四大特性的。而对于这四大特性,实际上分为两个部分。 其中的原子性、一致性、持久化,实际上是由InnoDB中的两份日志来保证的,一份是redo log日志,一份是undo log日志。 而持久性是通过数据库的锁,加上MVCC来保证的。redo log重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log

2022-04-01 16:15:20 848

原创 mysql中的锁

锁分类MySQL中的锁,按照锁的粒度分,分为以下三类:1.全局锁:锁定数据库中的所有表。2.表级锁:每次操作锁住整张表。3.行级锁:每次操作锁住对应的行数据。全局锁全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。对数据库进行进行逻辑备份之前,先对整个数据库加上全局锁,一旦加了全局锁之后,其他的DDL..

2022-03-31 21:03:23 1687

原创 mysql触发器

什么是触发器?在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性, 日志记录 , 数据校验等操作 。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。语法案例通过触发器记录tb_user表的数据变更日志,将变更日志插入到日志表user_logs中, 包含insert,.

2022-03-31 17:37:25 112

原创 mysql存储过程

是什么?存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。基本语法变量在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量。1.系统变量系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。.

2022-03-31 16:32:37 712

原创 mysql视图

什么是试图?视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。语法:创建视图:create or replace view 视图名 as select语句 [with local/cascaded check option];修改视图:create or replace v

2022-03-31 10:38:55 712

原创 sql优化

insert:如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。1.批量插入数据Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');2.手动控制事务3.主键顺序插入,性能要高于乱序插入。大批量插入数据:如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。操作如下:主键优化:1.满..

2022-03-31 09:20:25 117

原创 mysql索引

什么是索引?索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。mysql支持的索引结构:不同存储引擎对于索引的支持:B+Tree :绿色框框起来的部分,是索引部分,仅仅起到索引数据的作用,不存储数据。红色框框起来的部分,是数据存储部分,在其叶子节点中要存储具体的数据。MySQ...

2022-03-31 08:56:34 168

原创 mysql存储引擎

mysql体系结构:1.连接层主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。2.服务层主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表

2022-03-29 09:24:49 273

原创 mysql事务

什么是事务?事务是一组操作的集合,被事务管理的这些操作要么同时成功,要么同时失败。开启事务的两种方式:1.设置事务提交方式为手动提交:set @@autocommit = 0;-- 张三给李四转账1000元-- 1.查询张三账户时候大于1000元select money from account where name = '张三';-- 2.张三账户-1000元update account set money = money - 1000 where name = '张三';

2022-03-29 08:24:46 300

原创 mysql多表查询

内连接查询:定义:只查询交集隐式内连接:语法:select 查询字段 from 表1,表2 where 查询条件;-- 多表查询之隐式内连接select emp.name,dept.name from emp,dept where emp.dept_id=dept.id;显示内连接:语法:select 查询字段 from 表1 inner join 表2 on 查询条件;-- 多表查询之显式内连接select e.name,d.name from emp e inner

2022-03-28 17:55:57 739

原创 mysql字段约束

约束分类:非空约束:NOT NULL;唯一约束:UNIQUE;主键约束:PRIMARY KEY;外键约束:FORIGN KEY;默认约束:DEFAULT;检查约束:CHECK;约束演示:create table user( id int primary key auto_increment comment '主键', name varchar(10) not null unique comment '姓名', age int comment

2022-03-28 16:01:29 375

原创 mysql中常用的函数

字符串函数select concat('hello','mysql');将两个字符串拼接为一个字符串;select lower('HELLO');把HELLO转换为小写的hello;select upper('hello');把hello转换为大写的HELLO;select lpad('hello',10,'-');在字符串hello左侧拼接上“-”,最终输出为长度为10的字符串“-----hello”;select rpad('hello',20,'!');在字符串hello右侧拼接

2022-03-28 11:19:48 2841

空空如也

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

TA关注的人

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