自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java开发环境配置一指禅

IDEA 全称 IntelliJ IDEA,是java编程语言的集成开发环境。。

2024-02-28 11:16:22 774

原创 Mysql主从复制原理、基于Docker搭建Mysql主从环境、分别使用Mycat和Sharding-jdbc进行分库分表、读写分离

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。默认采用异步复制方式,从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或特定的数据库或特定的表。数据切分,通过某种条件,将我们之前存储在一台数据库上的数据,分散到多台数据库中,从而达到降低单台数据库负载的效果。数据切分大致分为垂直切分和水平切分。Mycat是服务端代理,不支持同一库内的水平切分 Sharding-Jdbc是客户端代理,支持同一库内的水平切分

2021-09-12 16:55:19 483

原创 Mycat配置文件Schema.xml详解

Schema.xml文件<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" dataNode="node3306,

2021-09-12 14:41:44 459

原创 锁的原理和使用场景,乐观锁、悲观锁、公平锁、非公平锁,基于数据库、Redis、Zookeeper实现分布式锁的原理及代码实现

锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。乐观锁、悲观锁、公平锁、非公平锁。单体应用锁是在一个JVM进程内有效,无法跨JVM、跨进程。分布式锁就是可以跨越多个JVM、跨越多个进程的锁。分布式锁都是通过第三方组件来实现的,目前比较流行的分布式锁的解决方案有:1、通过数据库可以实现分布式锁;2、借助Redis也可以实现分布式锁;3、Zookeeper也可以实现分布式锁。

2021-08-16 19:41:44 4707 5

原创 消息队列中间件之Kafka

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。Kafka是一种高吞吐量的分布式发布订阅消息系统。

2021-07-29 16:03:23 282

原创 linux部署jar包并外置配置文件

前言为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式。假设项目以最常规的方式打包成一个整体的jar包部署,即配置文件包含在jar包里,就会出现一个问题:项目运行过程中,要改动配置文件的话需要重新打包并部署。如果将项目的配置文件提取到jar包外统一管理,这样只改动了配置文件重启下服务就可以了,无需重新构建部署。实现原理根据yml配置文件加载原理,所有配置文件都

2021-07-29 15:27:12 5478

原创 docker安装FastDFS及SpringBoot项目整合FastDFS完成文件上传和下载

一、概念1、FastDFS是啥?FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。2、包括啥?FastDFS服务端有两个角色:跟踪器(trac

2021-06-25 12:01:38 568 3

原创 ES 查询关键字(match, term, range,terms)、组合多查询(must, should, must_not,filter)、分页、排序sort、高亮highlight

一、常用查询关键字1. match 查询match查询会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。{ "match": { "name": "南山" }} QueryBuilders.matchQuery("name", "南山") #java代码2.match_phrase默认使用 match_phrase 时会精确匹配查询的短语,需要全部单词和顺序要完全一样,标点符号除外。{"qu

2021-06-10 15:25:34 14882

原创 docker环境下分别搭建elasticsearch单体环境和集群环境、IK分词器的安装及SpringBoot项目的配置连接

一、elasticsearch简介Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合。二、单体环境搭建1.使用docker命令拉取elasticsearch镜像docker pull elasticsearch2.创建执行命令mkdir /mydata/elasticsearch/{config,data,plugins}创建文件夹并在config文件夹创建elasticsear

2021-06-09 11:13:03 495 1

转载 使用redis实现分布式会话

一、什么是会话?会话Session代表的是客户端与服务器的一次交互过程,这个过程可以是连续也可以是时断时续的。曾经的Servlet时代(jsp),一旦用户与服务端交互,服务器tomcat就会为用户创建一个session,同时前端会有一个jsessionid,每次交互都会携带。如此一来,服务器只要在接到用户请求时候,就可以拿到jsessionid,并根据这个ID在内存中找到对应的会话session,当拿到session会话后,那么我们就可以操作会话了。会话存活期间,我们就能认为用户一直处于正在使用着网站的状

2021-05-26 10:40:47 1044

原创 Redis在Springboot项目中的常用操作

一.引入redis依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisAp

2021-05-25 19:28:40 258

转载 Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

一、缓存处理流程请求进后台之后先从cache中取数据,取到直接返回结果,取不到时从db中取,将db中读取出来的数据入缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述:访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。解决方案:1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长

2021-05-25 15:26:26 288

原创 基于docker搭建Redis的三主三从集群模式

redis集群是由一系列的主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要 sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,客户端通过CRC16算法对key进行hash得到一个值,来判断该key存储在哪个主从服务上面,因此就算是某一个主从整个宕机,redis集群也是部分可用的。方便水平扩展,可以根据业务规模可以随时加减配置。据官方文档称可以线性扩展到上万个节点(但是官方推荐不超过1000个节点)。redis集群

2021-05-20 14:52:10 633 1

原创 redis 使用docker设置一主二从三哨兵

引子在之前的文章Redis的主从复制原理及docker环境下的实操中,实现了redis在docker环境下的主从复制,这时候会出现一个问题,如果Master挂了,如何保证可用性,实现继续读写,这时候就需要使用哨兵对redis主从服务进行监控。什么是哨兵 sentinel哨兵(Sentinel)是用于监控redis主从架构中master状态状态的工具,是redis高可用解决方案。哨兵可以监控一个或者多个redis master服务,以及这些master服务的所有slave服务。当某个master服务宕机

2021-05-08 17:49:50 356 3

原创 Jackson用于bean和xml的相互转换

概述Jackson是一个强大工具,可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。注解@JacksonXmlElementWrapper可用于指定List等集合类,允许指定用于包装列表和映射属性的XML元素;属性:namespace (default: “”) 确定包装器元素使用哪个XML命名空间localName 包装元素的本地名称useWrapping (default:true) 是否使用包装器元素:通过指定’fals

2021-04-27 17:46:56 2671

原创 Redis单线程、高并发快的原因&&Redis的缓存过期处理与内存淘汰机制

Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。Redis是单线程的原因Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网

2021-04-20 11:54:18 298 1

原创 Redis的主从复制原理及docker环境下的实操

一.概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。二.作用数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。负载均衡:在主从

2021-04-19 20:16:26 222

原创 Docker下安装Redis&&Redis的持久化机制

一、Docker下安装Redis1.docker中下载镜像docker pull redis2.创建redis.conf文件(建议从官网中下载)从官网中下载 redis-6.0.6.tar.gz,解压后获取其中的redis.conf文件,并上传到服务器的指定目录下3.修改redis.conf配置文件bind在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。通常情况下有两

2021-04-19 16:24:34 324

原创 SpringSecurity(四)实现图形验证码功能

开发生成图形验证码接口一.逻辑流程1.根据随机数生成图片2.将随机数存到session中3.在将生成的图片写到接口的响应中二.具体代码1.创建ImageCode 验证码类@Datapublic class ImageCode { private String code; private LocalDateTime expireTime; private BufferedImage image; public ImageCode(BufferedImage imag

2021-04-09 20:52:26 339

原创 SpringSecurity(一)简单使用和基本原理

1.Spring SecuritySpring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。SpringSecurity核心功能:认证(身份校验,你是谁),授权(你能干什么),攻击防护(防止伪造身份)下面几步就是Spring Security的简单使用及基本原理。2.注入依赖 <dependency> <groupId>org.springframework.cloud</groupId>

2021-04-09 18:59:07 165 1

原创 SpringBoot实战入门

SpringBoot 是 SpringMVC 的升级版,相对于编码、配置、部署和监控方面,会更加简单,本文主要包括以下内容:1.创建SpringBoot项目 2.自定义属性配置 3.SpringDataJpa的简单使用 4.@Valid注解用于校验 5.使用aop处理请求 6.@ControllerAdvice的功能(全局异常处理、全局数据绑定、全局数据预处理)

2021-04-09 11:28:35 172

原创 springboot配置数据库密码加密

SpringBoot项目经常将连接数据库的密码明文放在配置文件里,安全性就比较低一些,尤其在一些企业对安全性要求很高,因此我们就考虑如何对密码进行加密。

2021-04-03 15:31:10 1031 7

原创 Nginx缓存配置

一.浏览器缓存加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地浏览器中 location /files { alias /home/foodie; # expires 10s; #10s之后缓存失效 # expires @22h30m; # 晚上十点半 到这个时候 缓存就会到期 # expires -1h; # 一个小时之前缓存已经失效了 # expires epoch; # 不设置缓存 提醒浏览器 不设

2021-03-31 15:21:05 218

原创 使用Nginx实现负载均衡

负载均衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。实现负载均衡常用的Web服务器软件有Nginx、HAProxy、LVS、Apache,本文主要介绍Nginx的负载均衡策略。负载均衡方法nginx支持以下负载平衡机制(或​​方法):轮询-对应用程序服务器的请求以轮询方式分发, upstream tomcats { server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15; s

2021-03-29 20:20:25 211

原创 nginx的upstream指令参数

upstream指令参数1.max_conns限制每台server的连接数,用于保护避免过载,可起到限流作用测试参考配置如下:# worker进程设置1个,便于测试观察成功的连接数worker_processes 1;upstream tomcats { server 192.168.1.173:8080 max_conns=2; server 192.168.1.174:8080 max_conns=2; server 192.168.1.175:8080 max_conns=

2021-03-29 14:56:33 287

原创 nginx的root和alias指令用法和区别,location的匹配规则

1. root与alias假如服务器路径为: /home/nanshan/files/img/face.pngroot 路径完全匹配访问配置的时候为: location /nanshan { root /home }用户访问的时候请求为:url:port/nanshan/files/img/face.pngalias 可以为你的路径做一个别名,对用户透明配置的时候为: location /hello { alias /home/nanshan }用户访问

2021-03-24 16:19:03 151 1

原创 nginx日志切割的2种方法

方式一:手动切割1.创建cutlogs.sh文件,具体内容如下#!/bin/bash# 指定日志和切割后日志备份的目录YEAR=$(date +%Y)MONTH=$(date +%m)DAY=$(date +%d)YESTERDAY=$(date -d "yesterday" +%Y-%m-%d_%H:%M:%S) //文件名后缀LOGS_PATH=/mydata/nginx/log ##日志存放路径LOGS_BAK_PATH=/mydata/nginx/log #

2021-03-22 20:18:43 449

原创 docker搭建部署nginx

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 。本文详细介绍了利用docker搭建部署nginx的过程。

2021-03-22 19:43:07 338

原创 SpringSecurity(三)个性化用户认证流程

个性化用户认证流程一.自定义登录页面1.创建html文件,(Springboot项目html文件路径在resources/static/imooc-signIn.html),该表单登录请求为post请求,具体url为 /authentication/form<form action="/authentication/form" method="post"> <table> <tr> <td>用户名:<

2021-03-01 17:24:33 453 1

原创 SpringSecurity(二)自定义用户认证逻辑

SpringSecurity自定义用户认证逻辑1.处理用户信息获取逻辑用户信息获取逻辑是被封装到UserDetailsService接口中,loadUserByUsername方法作用是用户输入的username从存储去读取用户信息,然后封装到UserDetails这个实例中去,SpringSecurity会拿着这个用户信息进行处理,校验,如果校验通过了,就会把这个用户放到session中去,说明用户登录成功了,如果找不到,则会抛出UsernameNotFoundException用户名不存在这个异常,

2021-02-25 15:03:46 384 2

原创 @Valid使用详解以及自定义注解的简单使用

@Valid注解用于校验一.@Valid注解的基本使用:步骤1:将@Valid注解直接加在变量user之前,并且传入BindingResult对象(也可不传入),用于获取校验失败情况下的反馈信息,如下代码@RestController@RequestMapping("/user")public class UserController { @PostMapping public User create (@Valid @RequestBody User user, BindingR

2021-02-24 13:49:08 6271

原创 对象copy只拷贝对象非null属性

问题描述:在最近做项目的时候,使用到了对象copy,而只需要拷贝源对象的非空属性,为null的属性不进行copy。解决方法1.hutool开源库为我们提供了更为强大的Bean工具-BeanUtil <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.1.14</version>

2021-02-21 15:08:08 1401 3

空空如也

空空如也

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

TA关注的人

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