自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卡洛斯利伯

不想当厨子的销售不是好程序员

  • 博客(48)
  • 资源 (3)
  • 收藏
  • 关注

原创 分布式ID生成器(雪花算法改进版)ID不重复

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。snowflake算法的组成部分:41位的时间序列(精确到毫秒,41位的长度可以使用69年) 10位的机器标识(10位的长度最多支持部署1024个节点) 12位的计数顺序号(12位的.

2021-09-01 15:30:39 655

原创 logback异步日志,支持滚动策略

logback.properties# error日志保存路径LOG_ERROR_HOME=./logs/error/# info日志保存路径LOG_INFO_HOME=./logs/info/# 最长保存天数MAX_HISTORY=7# 日志文件最大MAX_FILE_SIZE=10MBlogback-spring.xml<?xml version="1.0" encoding="utf-8"?><configuration> <prop

2021-06-09 14:49:21 1458 1

原创 使用XStream实现Java对象与XML互相转换(不断更新中)

添加pom依赖<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.15</version></dependency>工具类代码package com.yongen.org;import com.thoughtworks.x

2021-05-18 17:06:33 779

原创 gitlab自动备份

为了防止gitlab服务器硬盘损坏等问题导致代码丢失,最好定时自动备份git仓库并保存在远程文件服务器上,下面是我的配置过程gitlab存储的目录在ubuntu中默认的gitlab仓库是在 /var/opt/gitlab/git-data/repositories 中,gitlab的备份文件保存在 /var/opt/gitlab/backups 之中修改备份保存的目录和保存时间我这里gitlab服务器挂载了两块硬盘,git仓库在第一块硬盘(/),于是我想要将gitlab的备份放在第二块硬盘中(/ba

2021-04-19 17:57:23 391

原创 【踩坑记录】Method oracle/jdbc/driver/OracleResultSetImpl.getObject is abstract 错误

版本:oralce 10gspringboot2.2.2mybatisplus 3.4.1异常堆栈:java.lang.AbstractMethodError: Method oracle/jdbc/driver/OracleResultSetImpl.getObject(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; is abstract at oracle.jdbc.driver.OracleResultS..

2021-01-05 15:56:58 5124 15

原创 Linux 操作Java程序的一个脚本(全)

#!/bin/bash# 这里可替换为你自己的执行程序,其他代码无需更改APP_NAME=test.jar# 指定运行环境 多个环境用,拼接PROFILES=test# 指定out文件名 会在jar同级目录生成一个outOUT_FILES=test# JVM启动参数 自行调优JAVA_OPTS="-Xms512m -Xmx512m -Xmn256m-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/work/app/api/dumps/-

2020-11-25 11:35:39 150

原创 elasticsearch报错Result window is too large问题解决

我在使用Elasticsearch进行search查询的过程中,出现了Result window is too large问题。异常堆栈信息:Caused by: org.elasticsearch.search.query.QueryPhaseExecutionException: Result window is too large, from + size must be less than or equal to: [10000] but was [178700]. See the scro

2020-11-24 10:34:14 789

原创 (高可用)分布式文件系统FastDFS安装部署(附Java示例代码可直接应用)

部署环境准备环境说明操作系统 CentOS7.6fastdfs 版本:6.01nginx 版本:1.16.1keepalived 版本:2.0.19系统依赖gcc gcc-c++ perl pcre pcre-devel zlib zlib-devel openssl openssl-devel libnl libnl-develyum install gcc gcc-c++yum -y install pcre pcre-devel yum -y install zlib zli

2020-09-29 10:03:55 614

原创 纯Java手写一个简单的RPC框架

手写之前先简单了解几个概念What is RPC?RPC远程过程调用(Remote Procedure Call)调用远程计算机上的服务,就像调用本地服务一样。Why RPC?分布式环境下各服务之间的相互调用必然会用到RPC思想。如下图:说一下我知道并了解的RPC框架?WebService(过时并且太重量级,目前一些老的金融和电信行业还在用)Dubbo(阿里开源,据说2012年停止更新)HSF(也是阿里的,好像是现在内部在使用,了解甚少)Spring ...

2020-06-13 22:48:52 2785 3

原创 Openresty通过Lua+Redis 实现动态封禁IP

需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。并且可以设置失效设计方案实现 IP 黑名单的功能有很多途径:1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;优点:简单暴力,直接在服务区物理层杜绝缺点:每次需要手动上服务器修改配置文件,麻烦,且不可控2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;优点:可动态实现封

2020-06-10 15:12:22 1726

原创 OpenResty 1.15.8.3 安装使用

服务器环境:Centos 7下载编译OpenResty yum install readline-devel pcre pcre-devel openssl openssl-devel gcc curl GeoIP-devel wget https://openresty.org/download/openresty-1.15.8.3.tar.gz tar -xvf openresty-1.15.8.3.tar.gz cd openresty-1.15.8.3 ./configure -j2

2020-06-10 15:08:22 3368

原创 【踩坑】 Integer 缓存池 引起的比较结果不符合预期的问题

问题:在项目中会根据类型id(Integer)判断跟前端传值是否一致,走不同的逻辑校验方法。bug定位代码:// 此处为前端页面传值。假设为2int type1 = FromVo.getType1();// 此处为前端页面传值。假设为320int type2 = FromVo.getType2();// 数据库存放值int dbType1 = 2;// 数据库存放值int dbType2 = 320;if(dbType1 == type1 && dbTy

2020-05-21 10:34:12 235

原创 redis踩坑记录:Could not get a resource from the pool

报错场景jedis 2.9.0spring-data-redis-1.7.1redis 5.0.5spring 4jdk 1.8配置jedis连接池获取jedis实例出现下面异常org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exce...

2020-04-07 18:04:46 1646

原创 解决多线程业务下 死锁和活锁的问题

关于死锁和活锁的概念死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。产生死锁的必要条件:互斥条件:所谓互斥就是进程在某一时间内独占资源。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾...

2020-03-11 17:54:12 385

原创 Java 自定义线程池 详解使用和优化策略

什么是线程池?为什么要用线程池? 降低资源的消耗。降低线程创建和销毁的资源消耗; 提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间 提高线程的可管理性。JDK中的线程池和工作机制线程池的创建ThreadPoolExecutor,jdk所有线程池实现的父类各个参数含义int corePoolSize :线程池中核心线程数,&lt...

2020-03-10 14:53:38 2152

原创 使用Java延时队列DelayQueue实现订单延时处理

DelayQueue简单介绍DelayQueue:一个使用优先级队列实现的无界阻塞队列。支持延时获取的元素的阻塞队列,元素必须要实现Delayed接口。适用场景:实现自己的缓存系统,订单到期,限时支付等等。具体代码会有注释,很好理解!这里我们模拟一个订单延时处理的demo首先我们定义一个订单实体类/** * 订单实体类 * @author James Lee *...

2020-03-09 18:55:09 1555 2

原创 利用位运算实现权限控制

前言平时我们系统的用户权限一般会存在数据库的一张权限表或者用户表的某个字段中来标识出用户是否具有某个条件。这种情况对于一般系统平台是没有什么问题的,大多数都是这样实现的,我自己也是这样的实现方案。最近看了一篇博客,讲的是电商互联网系统的商品或者用户等实体对象,对于权限的分配解决方案。蛮有意思的,这里贴上部分demo:JAVA简单实现用户的权限分配/** * 用位运算实现用户...

2020-03-08 12:28:39 402

转载 Linux-CentOS8安装mysql5.7

环境准备下载MySQL5.7.29(5.7.* 版本为目前互联网公司常用版本)开始安装1、检查机器是否存在已安装过mysql(如果确定没有安装请跳过)检查是否已经安装过mysql(新系统可能有自带的),执行以下命令:[root@localhost /]# rpm -qa | grep mysql如果出现类似以下内容,请先执行删除命令删除命令:[root@l...

2020-03-06 20:39:24 1167

原创 SQL优化策略

策略1.尽量全值匹配EXPLAIN SELECT * FROM staffs WHERE NAME = 'July';EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25;EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25 AND pos = 'd...

2020-01-20 13:52:53 216

原创 SQL执行计划参数详细说明

执行计划包含的信息简述字段描述id执行计划idselect_type查询的类型table查询的哪张表type访问类型possible_keys可能会用到的索引key实际使用的索引key_len索引中使用的字节数ref显示索引的哪一列被使用了rows根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取...

2020-01-20 11:24:08 1192

原创 接口限流防刷解决方案

最近要做一个接口供其他开发者调用。除了做接口安全方便策略(https/请求头部加时间戳/表单参数非对称加密)显然这些是不够的,这次记录一下接口限流防止恶意请求的解决过程。项目背景:springboot 2.1.8 redis代码思路新建一个注解类--> 拦截器--> 注册到springboot --> 将注解应用到具体Controller上第一步:首先我...

2019-12-16 13:56:46 1382

转载 SpringBoot +MySQL+mycat 实现读写分离+故障转移

关于MySQL的读写分离的实现,有两种方式,第一种方式即我们手动在代码层实现逻辑,来解析读请求或者写请求,分别分发到不同的数据库中,实现读写分离;第二种方式就是基于MyCat中间件来实现读写分离的效果;这两种方式我都会在这篇博客中进行详细地介绍、搭建,并且分析其中的优劣。原理初探从MySQL的主从同步开始谈起,最开始我们的数据库架构是这样的。主库负责了所有的读写操作,而从库只对主库...

2019-12-10 14:06:47 1759 10

转载 MySQL 主从理论知识+搭建主从

什么是MySQL主从同步数据是一个应用至关重要的一部分。从目的出发,主从同步有那么点备份的意思,主库(Master)将自己库中的写入同时同步给自己的从库(Slave),当主库发生某些不可预知的状况,导致整个服务器无法使用时,由于从库中也有一份数据,所以数据可以做到快速恢复,不造成或者减少造成数据的损失。当然,这只是第一个层面,如果主从库的作用仅限于此,那么我个人认为没有必要分为两个数据库,...

2019-12-10 14:03:32 113

转载 搭建redis集群(非Docker CentOS)

搭建Redis集群上文中说了三种Redis搭建的模式,分别是主从模式、哨兵模式、Cluster模式,关于前两种网上有着非常多的教程,这里就不再重新演示了,这里着重演示一下如何去搭建一个Redis Cluster集群。环境准备CentOS 7,Redis5.0.4场景描述本次会启动三台CentOS 7服务器,每台服务器上搭载三个Redis实例,一主二从,一共三个Master实例,...

2019-12-10 13:59:39 162

转载 关于redis集群的一些理论知识

什么是Redis集群简介Redis是一个快速高效的NoSQL型数据库,由于其基于内存存储、单线程、多路IO复用的特性,其QPS可以达到惊人的100000+(官方数据),但是即使有这么高的速度,在中国这么大的网民基数环境下,也存在着性能瓶颈。首先抛开服务器故障不谈,Redis集群首先可以使Redis性能得到线性提高,这是毋庸置疑的,其次Redis集群除了解决了效率问题,还可以解决服务器宕...

2019-12-10 13:50:09 151

转载 史上最全的Nginx配置参数中文说明

作者 | Ably来源 | https://segmentfault.com/a/1190000005789137Nginx配置参数中文详细说明:#定义Nginx运行的用户和用户组user www www;##nginx进程数,建议设置为等于CPU总核心数.worker_processes 8;##全局错误日志定义类型,[ debug | info | noti...

2019-11-28 13:58:49 262

转载 系统架构设计(一)如何更优雅的设计异常?

导语异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的。由于本文只作一些经验之谈,不涉及到基础知识部分,如果读者对异常的概念还很模糊,请先查看基础知识。前文:Java:如何更优雅的处理空值?如何选择异常类型异常的类别正如我们所知道的,java中的异常的超类是java.lang.Throwabl...

2019-10-31 11:27:31 428

转载 系统架构设计(一)如何更优雅的处理空值?

导语在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。业务中的空值场景存在一个UserSearchService用来提供用户查询...

2019-10-31 11:12:02 125

转载 MySQL 开发规范

一、数据库命令规范1、所有数据库对象名称必须使用小写字母并用下划线分割2、所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)3、数据库对象的命名要能做到见名识意,并且最后不要超过32个字符4、临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀5、所有存储相同数据的列名和列类...

2019-10-10 10:25:36 80

原创 JPA踩坑记录

坑1:JPA 根据主键获取对象时,如果查询不到记录报错。findOne:return如果没有找到,则使用给定id或{@literal null}的实体。不利于我么判空放弃使用。getOne:return如果没有找到会报javax.persistence.EntityNotFoundException,不利于异常处理放弃使用。findById:return如果没有找到会,会报jav...

2019-09-12 15:46:21 698

原创 Nginx 开启负载均衡并开启https

准备工具nginx-1.16.1 https://nginx.org/download/nginx-1.16.1.zipopenssl http://downloads.sourceforge.net/gnuwin32/openssl-0.9.8h-1-src-setup.exeSSL证书 (没有的去阿里云腾讯云去生成)ssl证书相互转换 参考博客:https://blog.csdn.n...

2019-09-03 11:56:15 630

原创 搭建redis集群(非Docker Windows server)

Redis集群Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主服务器宕机无备用服务器,多个节点网络互联数据共享,所有节点都是一主一从(也可以一主多从),其中不提供服务,只做为备份。直接进入主题。所需软件注意:版本不对应 可能会造成错误,我才疏学浅还没发现为什么会报错。强烈建议用本文中指定的版本!!R...

2019-08-28 10:10:57 162

转载 Haproxy+PXC搭建Mysql集群(Docker环境)

原文地址:https://www.jianshu.com/p/f35b6254c2b0安装环境centos7, docker集群方案介绍大型网站数据库需要应对高负载、实现高可用。而单节点数据库在并发量大的情况下无法满足性能要求,且一台宕机,整个服务受影响。Mysql集群:PXC 负载均衡:Haproxy 高可用:Keepalived高可用Mysql集群方案搭建px...

2019-07-19 10:57:10 575

原创 前后端分离开发规范

一、为什么要前后端分离前后端可以身心愉快地专注于各自擅长的领域 避免后端写前端代码(基本上1天时间,20%写后端代码,80%写页面...) 前端配置后端代码运行环境(简直是要疯... 装一堆环境,而且有些开发环境是windows,前端是macos,装环境就要装好几天) 避免前后端打架,推诿,甩锅.... 提高开发效率 分离有助于前端大放异彩,后端专注于三高。 太多了....二、前...

2019-05-27 14:33:36 3717

原创 修改无法启动的容器中的配置文件(es)

docker cp docker-elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml . #cp出来,到宿主机当前目录下vi elasticsearch.yml #修改配置docker cp elasticsearch.yml docker-elasticsearch:/usr/share/elasticsearc...

2019-05-07 17:37:41 1839

转载 Centos7上安装docker

Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。一、安装docker...

2019-05-07 14:53:07 76

原创 解决pull过慢或者卡死(linux)

1. 安装/升级Docker客户端推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce2. 配置镜像加速器针对Docker客户端版本大于 1.10.0 的用户您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daem...

2019-05-07 14:08:09 924

转载 分布式session解决方案

分布式session解决方案其实就是为了解决session一致性,说白了就是服务器集群Session共享的问题。Session的作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头...

2019-04-25 15:17:59 114

转载 Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享

JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redis实现Session共享。阅读本文需要有如下知识点:1.Nginx的安装、配置2.Spring+SpringMVC基本配置3.Redis缓存的使用Nginx和Redis我打算后期写几篇博客来介绍,这里小伙伴如果对这两个概念不懂的话可以先自行百度,对于Spring+Spri...

2019-01-21 11:10:24 309

转载 spring 常用注解

注解本身没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。本文主要罗列Spring|SpringMVC相关注解的简介。Spring部分1.声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller...

2019-01-17 17:33:34 103

rediscluster配置文件.zip

6389为6379的从节点,6390为6380的从节点,6391为6381的从节点。三主三从,下载完了修改bind dir masterauth cluster

2020-04-02

redis哨兵配置文件.zip

redis哨兵配置文件:3个Sentinel节点、2个从节点、1个主节点 下载完成后,默认密码是12345678,只需修改slaveof masterip port即可运行。 redis版本最好是大于3.0

2020-04-02

使用逆向工程生成mybatis的Mapper文件

使用逆向工程生成mybatis的Mapper文件

2017-07-10

空空如也

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

TA关注的人

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