MySQL8.0主从复制之Docker安装

Docker中安装数据库,建议日常开发使用,不建议生产使用。

1、Linux中安装Docker

1、如何安装docker呢

centos操作系统要采取yum install docker。。。。。

debian操作系统要采取apt install docker。。。。。

以上这种方式太麻烦,有甚者还要卸载掉以前老版本,有没有一键安装的操作方式呢,当然有的请参考:https://www.runoob.com/docker/ubuntu-docker-install.html

阅读全文

Java修改线上JAR包

方法一:简单粗暴法替换class文件

直接下载下来jar采用本地压缩软件(7z)直接打开,讲编译好要替换的文件直接拖进去压缩即可。
这种方法应对class文件替换,楼主试过均可以成果启动,如果出现莫名其妙其他问题请采用方法二进行处理

第二部分:采用Jar命令替换yml 、properties配置文件

此方法亲测有效,楼主采用方法一,修改yml文件总是出现莫名其妙的问题,无法正常启动。
采用以下方法成功上岸,方法如下,尽情参考。

1
2
3
4
5
6
7
8
1、使用命令 jar xvf xxxx.jar
2、解压完毕你会得到以下文件
drwxr-xr-x 4 root root 4096 Sep 29 10:30 BOOT-INF
drwxr-xr-x 3 root root 4096 Sep 29 10:30 META-INF
drwxr-xr-x 3 root root 4096 Sep 29 10:30 org
3、修改BOOT-INF下yml文件或者properties
4、打包jar jar -uvf xxxx.jar BOOT-INF\classes\application.yml
5、验证成果
阅读全文

Netty中IP黑名单处理?

IP黑名单介绍实战

根据官方文档发现RuleBasedIpFilter,进行IP过滤实现黑白名单处理。
官方文档地址如下:https://netty.io/4.1/api/io/netty/handler/ipfilter/IpFilterRule.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class IpFilterRuleHandler extends RuleBasedIpFilter {
private BlackService blackService = SpringUtil.getBean(BlackService.class);
@Override
protected boolean accept(ChannelHandlerContext ctx, InetSocketAddress remoteAddress) throws Exception {
String hostAddress = remoteAddress.getHostString();//ip信息
IpFilterRuleType filterRuleType = IpFilterRuleType.ACCEPT;//通过
if(StrUtil.isNotBlank(hostAddress)){
boolean isReject = blackService.checkBlackList(hostAddress);//检测实时黑名单
if(isReject){
filterRuleType = IpFilterRuleType.REJECT;//拒绝创建
}
}
return filterRuleType == IpFilterRuleType.ACCEPT;
}
}
阅读全文

axios自定义header

第一部分:前端为什么要使用axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
根据一系列搜索后,据别人吹水说axios性能会比jquery…其他请求框架要好,最重要的是它支持过滤器功能。方便前端分离项目使用。

1
2
# 当然想了解更多axios请戳这里:
http://axios-js.com/zh-cn/docs/

第二部分:实战与应用

前端JS内容

阅读全文

SpringBoot下载大文件内存溢出处理

文件的上传和下载是Web系统中的一个很普通的功能,实现的方式也有很多种,如利用 java.io 下面的各种IO类自己实现,或者利用 Commons IO 包中的 FileUtils 、 IOUtils 类中封装好的方法直接调用。

1
2
3
4
//此处省略N行代码
ServletOutputStream os = response.getOutputStream();
File zipFileDownLoad = //此处省略下载文件代码
IoUtil.write(os,true,FileUtil.readBytes(zipFileDownLoad));//读取文件下载

我们大部分情况均会采用以上的方式进行处理。
FileUtil.readBytes 这句代码会将文件之间一次性读取到内存中。如果配置内存不能满足文件大小,结果如下👇👇👇

1
java.lang.OutOfMemoryError: Java heap space //这个很熟悉吧

通常我们解决此问题方式均是

1
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

但即使按照把上面的参数配置都扩大一倍,在下载更大的文件时还是会遇到 java.lang.OutOfMemoryError: Java heap space 这个错误,上面的解决方法治标不治本。分析下异常堆栈可以发现问题产生的根源在于 FileUtil.readBytes这行代码,FileUtil.readBytes 会把文件一次性读入内存中,要下载的文件越大,需要占用的内存也越大,当文件的大小超过JVM和Tomcat的内存配置时,OutOfMemoryError 这个问题就会不可避免的发生。

阅读全文

Redisson之RRateLimiterHTTP限流

基于Redis的分布式限流器(RateLimiter)可以用来在分布式环境下现在请求方的调用频率。既适用于不同Redisson实例下的多线程限流,也适用于相同Redisson实例下的多线程限流。该算法不保证公平性。除了同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。

如何限制HTTP请求次数(分布式)

本地缓存显然不能满足,只能考虑redis当然redis中采用lua脚本也是可以实现的。今天文中的redisson中RateLimiter也是可以的

官方例子看一下 https://github.com/redisson/redisson/wiki/6.-%E5%88%86%E5%B8%83%E5%BC%8F%E5%AF%B9%E8%B1%A1

1
2
3
4
5
6
7
8
9
10
11
12
13
RRateLimiter rateLimiter = redisson.getRateLimiter("myRateLimiter");
// 初始化
// 最大流速 = 每1秒钟产生10个令牌
rateLimiter.trySetRate(RateType.OVERALL, 10, 1, RateIntervalUnit.SECONDS);

CountDownLatch latch = new CountDownLatch(2);
limiter.acquire(3);
// ...

Thread t = new Thread(() -> {
limiter.acquire(2);
// ...
});
阅读全文

Redisson学习笔记

Redisson底层采用的是Netty 框架。支持Redis 2.8以上版本,支持Java1.6+以上版本。
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

SpringBoot集成Redisson

1、pom中maven配置

1
2
3
4
5
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.12.3</version>
</dependency>

2、yml配置集成Redisson

1
2
3
4
spring: #redisson 配置信息  
redis:
redisson:
config: classpath:config/SingleServerConfig.yml
阅读全文

MySQL之federated数据表映射

FEDERATED是什么呢?
通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中。就是说,这种建表方式只会在数据库A中创建一个表B的表结构文件,表的索引、数据等文件还是在机器B上的数据库B中,相当于只是在数据库A中创建了表B的一个快捷方式。

1、:如何开启

1、是否支持FEDERATED引擎

alt text

阅读全文

Nginx学习笔记

第一部分:Nginx学习必知

Nginx是一个以高性能、高并发著称的HTTP服务器,它支持HTTP(HyperText Transfer Protocol,超文本传输协议)反向代理、TCP(Transmission Control Protocol,传输控制协议)代理、负载均衡、HTTP缓存及Web开发等。

HTTP请求报文
1、请求行,包括请求方法、请求URL(Uniform Resource Locator,统一资源定位符)、HTTP及其版本号。

  • HTTP1.1 (PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH)兼容HTTP1.0
  • HTTP1.0 (GET、HEAD、POST)等

2、请求头、指客户端向服务器传输请求时附加的一些信息,有key/value组成,使用:隔开。常见key(Cookie、User_Agent、Accept-Encoding)等。
3、请求体、一般由POST请求方法进行提交,可以传输图片、文件或者字符串等。

HTTP相应报文
1、响应行、包含HTTP版本号、状态码、状态码描述。

阅读全文

Nginx调用ip2region的lua_c

第一部分:ip2region准备工作

GitHub 地址:https://github.com/lionsoul2014/ip2region
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。

今天的主角是lua_c模块,我们要使用Openresty调用lua查询IP地址定位。

安装Openresty等环境

安装环境套件请移步 https://oneinstack.com/
Openresty安装目录/usr/local/openresty
这里介绍下Openresty采用LuaJit,目前套件中使用的LuaJit2.1对应的Lua5.1版本,固然ip2region的Lua(Ip2region模块的位运算依赖了bit32模块,这个是lua 5.2才开始支持的。)是不能直接使用的。
LuaJit安装目录/usr/local/openresty/luajit/include/luajit-2.1

下载好 GitHub 地址:https://github.com/lionsoul2014/ip2region 源码

编译ip2region.so文件
我们使用到目录binding/lua_c和binding/c目录和ip2region.db文件

阅读全文