自定义博客皮肤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函数提取字符串中的数字

创建函数(直接执行sql): DELIMITER $$DROP FUNCTION IF EXISTS `GetNum` $$ -- text要根据自己的字符串大小来定CREATE FUNCTION `GetNum` (Varstring text) RETURNS text CHARSET utf8mb4 BEGIN DECLARE v_length INT DEFAULT 0 ; DECLARE v_Tmp VARCHAR (50) DEFAULT '' ; SET v_len

2020-12-16 20:53:32 715

原创 各种锁的理解

公平锁和非公平锁公平锁:非常公平,线程不能插队非公平锁,线程可以插队Lock lock = new ReentrantLock();就是非公平锁可重入锁同步方法嵌套,线程在拿到外边锁了,也会获取到里边的锁,synchronized锁public class Demo1 { public static void main(String[] args) { Phone phone = new Phone(); new Thread(()->{

2020-10-22 20:21:47 184

原创 CAS;compareAndSet

什么是CASCAS:compareAndSet的缩写,比较和修改。这个设计到操作系统。compareAndSet有两个参数一个是期望,另一个是修改的值,就是如果期望的值达到了,就修改。反之就不修改AtomicInteger atomicInteger = new AtomicInteger(2020);# 在初始化的时候就设置了初始值为2020,调用compareAndSet,原值和期望值相同,就修改为2022.atomicInteger.compareAndSet(2020, 2022);Sy

2020-10-22 15:24:41 214

原创 单例模式

普通的两种单例模式,饿汉式和懒汉式饿汉式饿汉式会造成内存的占用 // 首先私有构造private HunSingle(){} private static final HunSingle HUN_SINGLE = new HunSingle(); public static HunSingle getInstance(){ return HUN_SINGLE; }懒汉式private LazySingleDemo1(){}# 加上volatile关键字是保证不会发

2020-10-22 14:08:57 109

原创 JMM,volatile

JMM?JMM是java的内存模型,是不存在的,是一种约定,概念JMM的同步约定:在加锁之前,要把主存中的共享变量复制到自己的工作内存中在解锁前,要把自己工作内存中的共享变量刷新到主存中加锁和解锁必须是同一把锁8种操作(四组:read和load,use和assign,write和store,lock和unlock)volatile关键字是虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排保证可见性代码:# 如果不添加volatile关键字,主线程修改了num的值

2020-10-22 11:12:41 85

原创 函数式接口,Stream流

jdk中函数式接口Consumer<T> // 消费型Function<T,R> // 函数式Supplier<T> // 供给型接口Predicate<T> // 断定式,返回boolenFunction<String, String> function = str->{return str;};String s = function.apply("你好啊");System.out.println("我是返回值---" +

2020-10-22 09:42:46 61

原创 线程池

池化技术:实现准备好资源,有人要用从我这里拿,用完了,还给我。线程池的好处:减少资源的消耗,因为要用线程池的资源必定都是一些创建销毁都是很耗资源的东西。提高响应的速度管边管理线程池的三大方法,7大参数,4种拒绝策略注意:根据阿里巴巴代码规范,线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。三大方法# 创建一个容量的线程池 Executors.newSingle

2020-10-21 19:35:35 60

原创 BlockingQueue阻塞队列

BlockingQueueBlockingQueue是基础与Queue,而Queue又是继承于Collection。常用方法

2020-10-21 15:28:17 77

原创 本地虚拟机搭建zookeeper集群

下载地址(需要科学上网)注意:下载3.5.8之后的版本的时候,需要下载带bin的。才可以使用下载完成后,上传到/home/software解压:tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz#改名mv apache-zookeeper-3.5.8-bin zookeeper# 换位置mv zookeeper /usr/local/修改配置文件(只修改其中一个,然后用scp就行了)cd /usr/local/zookeeper/conf# 修改配

2020-09-16 21:08:47 119

原创 RabbitMq

简介:RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。1:RabbitMQ的四种集群架构主备模式warren(兔子窝),一个主/备方案(主节点如果挂了,从节点提供服务,和ActiveMQ利用Zookeeper做主/备一样),使用HaProxy做主备切换,主节点挂了,又重新加入集群,会成为从节点远程模式远距离通信和复制,可以实现双活的一种模式,简称S

2020-09-14 11:04:14 328 1

原创 Centos7上安装fastdfs

参考文献https://github.com/happyfish100/https://github.com/happyfish100/fastdfs/wikihttps://www.cnblogs.com/leechenxiang/p/5406548.htmlhttps://www.cnblogs.com/leechenxiang/p/7089778.html下载安装包:libfatscommon:FastDFS分离出的一些公用函数包FastDFS:FastDFS本体fastdfs-ngi

2020-09-06 21:13:32 153

原创 使用james搭建邮件服务

参考博文博客1,博客2,博客3下载地址:http://james.apache.org/download.cgi我使用的是2.3.2.1的Linux版本,jdk用的1.81:安装邮件服务器的smtp使用25端口,必须保证此端口没有被占用如果被占用使用命令service postfix stopchkconfig postfix off使用ftp工具把james-2.3.2的压缩包上传至服务器解压缩并且重命名后:tar -zxvf james-binary-2.3.2.1.tar.gz

2020-09-06 15:47:45 1212

原创 springboot操作elasticsearch

1:使用ElasticsearchRestTemplate# 查询 SearchRequest searchRequest = new SearchRequest("stu"); SearchSourceBuilder searchSourceBuilder = searchRequest.source(); MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "哈哈");

2020-09-02 20:57:34 174

原创 Elasticsearch集群

Elasticsearch集群的概念引子单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了。集群不仅可以实现高可用,也能实现海量数据存储的横向扩展。分片机制每个索引可以被分片,就相当于吃披萨的时候被切了好几块,然后分给不同的人吃...

2020-09-01 21:00:16 132

原创 Kibana

什么是kibana?Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。docker运行kibana直接运行:# 本地没有镜像会自动下载docker run -d --name kibana -p 5601:5601 kibana:tag启动完成后访问:ip:5601汉化# 进入容器docker exec -

2020-08-24 20:36:02 591

原创 Elasticsearch的分词器

什么是分词?把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。es内置分词器standard:默认分词,单词会被拆分,大小会转换为小写。simple:按照非字母分词。大写转为小写(例如标点符号)。whitespace:按照空格分词。忽略大小写。stop:去除无意义单词,比如the/a/an/is…keyword:不做分词。把整个文本作为一个单独的关键词ik 分词器版本和elasticsearch版本不对应报错,导致

2020-08-23 21:48:15 178

原创 Elasticsearch

什么是ElasticsearchElasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适

2020-08-22 15:09:46 215

原创 简单的CAS单点登录

使用Redis+cookie实现简单的单点登录1:用户第一次登陆A系统,发现未登陆,会携带上returnUrl跳转至CAS系统的登陆方法,在这个方法会验证此用户是否已经登陆(具有全局会话),如果没有登陆,就会跳转至CAS登陆页面,让用户登录 @GetMapping("/login") public String test(HttpServletRequest request, HttpServletResponse response, Model

2020-08-20 14:32:57 186

原创 分布式会话

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

2020-08-20 14:19:22 171

原创 Redis缓存穿透和雪崩

缓存穿透在实际中,Redis没有起到缓存的作用,请求还是到了数据库,对数据库造成了很大的压力。比如说:用户在请求一条数据,这个数据在数据库中不存在,那么缓存中也不会存在,用户在发起很多次请求的时候,都会绕过Redis,而直接访问数据库,这就是缓存穿透。处理方式:-1:将查询到空的数据也放置到缓存中,设置一个过期时间。-2:采用布隆过滤器布隆过滤器布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在

2020-08-19 14:09:25 90

原创 Redis的集群(三主三从)

引子主从复制以及哨兵,他们可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群。使用redis-cluster: 他可以支撑多个master-slave,支持海量数据,实现高可用与高并发。哨兵模式其实也是一种集群,他能够提高读请求的并发,但是容错方面可能会有一些问题, 比如master同步数据给slave的时候,这其实是异步复制吧,这个时候master挂了,那么slave.上的数据就没有master新,数据同步需要时间的

2020-08-18 22:16:14 5093

原创 Redis的哨兵模式

为什么使用哨兵模式Master挂了,如何保证可用性,实现继续读写什么是哨兵Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一 个或者 多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后, 会把这个master’ 下的某个从服务升级为master来替代已宕机的master继续工作。示例图如何配置哨兵?在Redis解压文件中有一个哨兵配置文件sentinel.conf拷贝此配置

2020-08-18 17:18:18 101

原创 Redis主从复制和过期淘汰

Redis的主从复制,只需要在 从节点做配置# 配置主节点的IP和端口replicaof 192.168.3.70 6379# 配置密码masterauth 121321# 配置从节点只读(默认就是只读)replica-read-only yes# 查询主节点或者从节点的信息info replication主:从:Redis的主从复制同步数据:默认的是:Redis会创建一个子进程,子进程会在磁盘上写RDB文件,稍后,该文件由父进程以增量方式传输到子节点,这种方式是依赖磁盘的

2020-08-18 14:08:36 219

原创 Redis的备份

Redis的备份包括RDB和AOF两种RDB: Redis DataBaseAOF: Append Only File1:RDB1.什么是RDBRDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的(会损失最后一次的备份之后增加或修改的数据),那么再次启动redis后,则会恢复。2.备份与恢复内存备份–>磁盘临时文件临时文件->恢复到内存3. RDB优劣势●优势1.每隔一-段时间备份,全备份

2020-08-18 08:59:06 229

原创 Redis的数据类型和命令

1:字符串key相关keys *:查看所有的key (不建议在生产上使用,有性能影响)type key:key的类型string类型get/set/del:查询/设置/删除set rekey data:设置已经存在的key,会覆盖setnx rekey data:设置已经存在的key,不会覆盖set key value ex time:设置带过期时间的数据expire key:设置过期时间ttl:查看剩余时间,-1永不过期,-2过期append key:合并字符串strlen

2020-08-17 20:19:46 164

原创 LVS(Linux Virtual Server)

1:LVS(Linux Virtual Server)即为Linux虚拟服务器。lvs是Linux的负载均衡器,他的特点是只会转发请求,但是不会处理相应。就相当于一扇门,只有进的人,人从其他的出口出去,那么这一扇们的性能就非常好。Nginx的网络拓扑图(请求,响应都会通过Nginx)lvs的网络拓扑图(lvs不会处理相应)2 lvs的三种2.1:NAT模式(类似于Nginx),所有的请求和相应都会经过lvs,在并发不高的情况下,这种模式也是没有问题的。2.2 TUN模式,相应不会经过LVS

2020-08-17 13:12:53 349

原创 centos7上安装redis

下载地址上传并解压tar -zxvf redis-5.0.5.tar.gz# 进入Redis目录cd redis/# 安装gcc编译环境,如果已经安装过了,那么就是 nothing to doyum install gcc-c++ make && make install配置redis,在utils下,拷贝redis_init_script到/etc/init.d 目录,目的要把redis作为开机自启动cd utils/cp redis_init_script /e

2020-08-17 13:10:34 95

原创 本地虚拟机ping不通本机

打开防火墙的高级设置,选择入站规则找到文件和打印机共享(回显请求-ICMPv4-In),然后右键启用,就可以了,虚拟机就可以ping通本机了

2020-08-14 16:14:19 255 1

原创 Keepalived

1:简介Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。2:安装下载地址2.1:上传下载的tar包上传到/home/solfware下,解压,并进入目录2.2:安装环境 2.2.1 安装gcc环境yum i

2020-08-10 23:30:09 187

原创 Nginx配置Tomcat集群和集群

1:在Nginx的配置文件中或者引用配置文件中upstream tomcats { # hash算法,是根据IP的前三段来算的 # ip_hash; # 服务后边的可跟参数 # max_conns=2:配置限制连接数 # slow_start=60s:缓慢加载,配置了会将这个服务缓慢的加到集群中,并且权重从0缓慢的加载到人为配置的权重,并且这个不能喝hash和random load balancing中使用,集群必须包括多台服务 # down:标记当前服务不可用 # backup:标记当前服

2020-08-10 21:05:11 132

原创 在centos7上安装Nginx

在centos7上安装Nginx1:在官网下载对应的Nginx包,推荐使用稳定版2:上传到centos7 中3:安装依赖环境3.1 安装gcc环境yum install gcc-c++3.2 安装PCRE库,用于解析正则表达式yum install -y pcre pcre-devel3.3 zlib压缩和解压缩依赖yum install -y zlib zlib-devel3.4 SSL安全的加密的套接字协议层,用于HTTP安全传输,也就是httpsyum in

2020-08-06 15:53:12 151

原创 docker的容器数据卷

1:容器数据卷作用:在宿主机,容器及容器之间建立一种文件共享机制,可以实现数据的持久化2:添加容器数据卷的方式2.1:直接使用命令添加语法:docker run -it -v /宿主机目录:/容器内目录 --privileged=true 镜像例如:docker run -it -d -v /root/mycentos:/root/mycentos --privileged=true centos--privileged=true 是可以有权限在容器的对应目录有读写权限查看容

2020-06-30 21:00:58 163

原创 认识并使用docker

1:什么事dockedocker是一个开源项目,诞生于2013年,基于Google公司推出的go语言。项目后来加入了Linux基金会,遵从了Apache2.0协议。docker的目标是实现轻量级的操作机洗虚拟化解决方案。docker的基础是Linux容器(LXC)等技术。在LXC的基础上docker进行了进一步的封装,然用户不需要关心容器的管理,使得操作更加简单,用户操作docker的容器就像操作一个快速轻量级的虚拟机一样简单。2:docker的设计思想:docker的设计思想来源于集装箱,集装箱解

2020-06-30 09:12:24 189

原创 springboot解决跨域和集成springsecurity解决跨域

1:什么是跨域:跨域问题是由于浏览器的同源策略造成的。就是浏览器不能请求不同域的资源协议,IP,端口,任意一个不一样,就会被浏览器的同源策略限制,引发跨域的问题2:解决跨域问题2.1:前端解决方法, HTML的script标签可以加载另外一个域下边的脚本 HTML的link标签可以加载另外外一个域下边的css HTML的img标签,可以加载另外一个域下边的图片 HTML的iframe标签,可以加载另外一个域的页面,对于使用jsp,f

2020-06-28 13:26:01 2026 1

原创 springboot2.3集成springsecurity实现模拟短信验证码登陆

基本原理:登陆页请求后台生成需要验证的验证码,将验证码和手机号存入session中,同时将验证码发送到手机(这里只是模拟)。真正登陆的时候,先通过自定义的验证输入验证码是否正确的过滤器。然后再执行通过手机号进行认证的filter,provider(都是自定义实现)等,实现认证,登陆系统。实现1 创建一个短信验证码的实体,里边存放需要校验的字符串,过期时间,手机号package com.itgo.springboot.springsecurity.config;import java.time.Lo

2020-06-22 23:24:43 683

原创 springboot2.3集成springsecurity实现简单的基于session的图片验证码

1:基于session的图片验证码校验的实现1.1:原理。登陆页面请求后台,后台生成 一个随机的字符串。后台将这个字符串存在session中,并给一个过期时间,然后后台再将这个字符串以图片的形式返回。登陆的时候,把这个字符串返回给后台做校验。1.2:具体实现。我使用的Google提供的kaptcha首先引入依赖:<dependency> <groupId>com.github.penggle</groupId> <artifactId>ka

2020-06-22 23:06:20 333

原创 springboot2.3.0集成springsecurity,实现持久化到数据库的记住我以及logout

1:首先创建一张表为什么是这张表,可以点开JdbcTokenRepositoryImpl看sql:CREATE TABLEpersistent_logins(usernamevarchar(64) NOT NULL,seriesvarchar(64) NOT NULL,tokenvarchar(64) NOT NULL,last_usedtimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KE

2020-06-22 10:42:51 482

原创 springsecurity实现数据库动态加载资源鉴权规则以及权限表达式

1:在springsecurity的配置文件中添加配制@Override protected void configure(HttpSecurity http) throws Exception { http.headers().frameOptions().sameOrigin(); //http.csrf().disable().cors().disable().headers().disable(); http.authorizeRequest

2020-06-22 08:46:18 995

原创 springboot2.3.1集成springsecurity实现连接数据库登陆

1:首先要有实体表等springsecurity使用接口UserService中的loadUserByUsername(String username);查询数据库中的用户信息,所以我们需要自定义一个UserServiceImpl来实现UserService,重写loadUserByUsername(String username)方法。springsecurity需要用UserDetails来实现认证和授权。所以我写了一个类来实现UserDetails这个接口,并且将用户实体作为里边的一个属性。Us

2020-06-17 23:40:13 966 1

原创 springboot2.3.1集成springsecurity的最基础demo

springboot2.3.1集成springsecurity的最基础demo1.简单认识springsecuritySpring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!我们首先认识两个类和一个注解:WebSecurityConfigurerAdapter:sprin

2020-06-16 21:23:07 592

空空如也

空空如也

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

TA关注的人

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