自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 十六:一致性哈希算法

十六: 一致性哈希算法背景一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,解决的问题目的是解决分布式缓存的问题。在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。局限性增加机器、减少机器会导致部分键失效。可以通过增加虚拟节点来最大减少损失,当实际节点太少,加减机器会大范围影响哈希环中数据映射,因此这种不适合少数据节点的分布式缓存方案。算法解释四个节点均匀的落在了换上,每一节点存缓存上一个节点到他之间的hash值的key。如计

2020-07-16 11:21:52 12

原创 十五:Redis持久化之AOF

十五:Redis持久化之AOF本文源码基于redis2.2分析AOF为了解决生成快照时,因为保存rdb文件的导致redis阻塞,redis引入了bgsave方式,再一次为了解决不能实时的保存,redis引入了aof机制。以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。配置解释############################## APPEND ONLY MOD

2020-06-22 17:24:20 47

原创 十四:Redis持久化之rdb

十四:Redis持久化之rdbRedis提供了两种持久化的方式:AOF与RDB: RDB偏重在保存某个时间redis的快照;AOF偏重在实时保存的效率上。两者方案侧重点不同。RDBRDB:redis database 意思时在指定时间间隔内将内存中的数据写入到磁盘也就是说一段时间对redis进行一次快照;rdb写入的是二进制数据所以文件大小也更紧凑些。RDB: 一般应用在对数据冷备、复制传输,重启redis加载rdb的数据也更快一些。配置项可以在redis.conf中配置是否开启RDB(

2020-06-19 17:28:53 24

原创 十三: redis--发布订阅模式使用及场景

十三: redis–发布订阅模式使用及场景发布订阅模式一般用来做广播,发布者发送消息到指定的通道,订阅者订阅指定的通道,当发布者发送了新的消息,订阅者可以马上收到消息,一个通道可以有多个订阅者,后面订阅的订阅者不能收到之前的消息,因为发布订阅不做消息持久化以及ack确认消息消费。所以如果做消息队列是不能满足生产消息不能丢失的情况,已经吞吐率。命令publish解释发送消息到指定通道返回的结果表示有少个订阅者用法 publish channelName msg示例12

2020-06-18 10:20:27 76

原创 十二:redis击穿、穿透、缓存雪崩

十二:redis击穿、穿透、缓存雪崩概念区分: 击穿、穿透、雪崩大量流量下:缓存层DB场景存在存在正常(使用缓存)不存在存在缓存击穿不存在不存在缓存穿透击穿: 大量的key过期,导致请求高峰,瞬间大量流量压到了DB;穿透: 大量请求缓存、DB不存在的数据,一般是恶意攻击;雪崩:缓存层服务不在提供服务,所有请求流量压到了DB,导致DB无法对外正常提供服务,进而波及使用这个DB的相关系统,最终导致整个系统崩溃;击穿大量的key过期,导致请

2020-06-15 15:40:19 68

原创 十一:redis之布隆过滤器的使用与应用场景

十一:redis之布隆过滤器的使用与应用场景什么是布隆过滤器我们会遇到一些场景,判断元素是否在集合中。我们可以采用的方案有set。我们来看这两个方案的优缺点如果我们使用set来进行判断元素是否在集合中,那么假设每一个元素的32Bit(2^24 ≈ 1600万; 2^32 ≈ 42亿),假设我们存储1亿个不重复的元素那么我们需要 100 000 000 * 32 /8/1024/1024 ≈ 381MB;布隆过滤器的空间占有有一个简单的计算公式,但是推到比较繁琐。布隆过滤器有两个参数,预计元素数量

2020-06-12 16:10:13 112

原创 十:redis之HyperLogLog的使用与应用场景

十:redis之HyperLogLog的使用与应用场景HyperLogLog为实现一种基数统计的算法,redis采用HyperLogLog来进行基数统计。(redis2.8.9及之后的版本有提供这个功能)基数统计; 通常来统计一个集合中不重复的元素个数。为什么使用HyperLogLog而不是set或者bitmap如果我们使用set来进行基数统计,那么假设每一个元素的32Bit(2^24 ≈ 1600万; 2^32 ≈ 42亿),假设我们存储1亿个不重复的元素那么我们需要 100 000 00

2020-06-11 17:18:27 141

原创 监控服务器系统负载,内存以及实战java线程耗时长

监控服务器系统负载,内存以及实战java线程耗时长查看cup load averageuptimetopcat /proc/loadavg前两个命令可以看到load average有三个值load average: 0.06, 0.12. 0.13这三个值分别代表 1分钟,5分钟,15分钟的cpu load情况。(如果5,15分钟负载持续高需要密切关注原因)load average: 一段时间内处于可运行状态和不可中断状态的进程平均数量。(可运行分为正在运行进程和正在等待cpu的进

2020-06-05 16:18:13 59

原创 代码检查技术Checkstyle与p3c调研

代码检查技术Checkstyle与p3c调研1.功能及差异1.1 检查语言代码检查JavaC语言javascriptCheckstyle√××P3c√××1.2 Jdk版本支持代码检查支持jdk版本CheckstyleCheckstyle7 >= jdk1.8P3c>jdk1.61.3 使用方式代码检查Idea插件Eclipse插件Maven插件命令独立执行Checkstyle

2020-06-03 15:24:11 205

原创 九redis之bitmap位图

九redis之bitmap位图redis2.2.0开始支持的对bitmap进行操作(位图本质上使用的string数据类型)。bitmap通过使用一个bit来表示某个元素对应的值或状态,bit的值只有0,1默认为0。一个byte可以存8个bit,使用bitmap我们可以极大的节省空间。命令setbit解释设置或清除位图上指定偏移位的值,value必须是0,1;如果键不存在,则命令会先创建一个字符串数据类型的键,当设置的偏移位不存在,字符串的长度会自动增长,字符串的最大有2^32位(也就

2020-05-25 11:47:51 44

原创 kill -9与kill -15的区别(以kill nginx的master进程举例)

kill -9与kill -15的区别(以kill nginx的master进程举例)解释nginx -9 一般用来强制关闭进程,直接关闭(极端情况下使用此命令)。nginx -15 通知进程关闭,会等待进程及其相关的资源释放。kill nginx master我们直接上图,看下分别使用kill: -9,-15来关闭nginx的主进程。kill -9 nignxMaster从上图中我们可以看到,直接kill -9掉master进程,nginx的work进程并没有停止,如果这个时候我们启动ng

2020-05-20 15:56:31 139

原创 处理nignx报413错误

处理nignx报413错误报错原因nginx报413 Request Entity Too latger原因是请求体太大,nginx报异常处理方案下面两个值建议设置大一点(5000M)。http { client_max_body_size xxxM; client_body_buffer_size xxxM;}client_max_body_size : 设置允许客户端最大的请求体,nginx默认为1M。client_body_buffer_size : 如果请求的数据小

2020-05-18 10:57:35 82

原创 使用try-with-resources优雅的关闭流

使用try-with-resources优雅的关闭流java7之前关闭流的方式在java7之前关闭流,是一件非常麻烦的事情,要写很多异常处理,我们来看看代码public void readFirstLineFromFile(String path) { BufferedReader br = null; try { br = new BufferedReader(new FileReader(path)); System

2020-05-12 11:17:15 127

原创 八redis的sortset数据类型常见命令、内部编码、场景

八redis的sortset数据类型常见命令、内部编码、场景有序保存多个不重复的字符串的集合。常见命令zadd解释有序集合插入元素以及元素的分数(分数支持双精度浮点数)。如果本次插入的元素已经存在,则更新元素的分数,并且重排序。如果键不存在,则创建Key。如果其中元素的分数相同,则按照字典序排序。用法 zadd key [NX|XX] [CH][INCR] socre member [score member]NX: 仅仅更新元素的分数,元素必须存在才能操作成功XX: 仅仅添加

2020-05-11 18:45:51 68

原创 七redis的set数据类型常见命令、内部编码、场景

七redis的set数据类型常见命令、内部编码、场景保存多个不重复的字符串的集合。常见命令sadd解释往集合中添加元素,如果值已经存在,则忽略。如果键不存在,则创建键后往键里添加元素。用法 sadd key value示例127.0.0.1:6379> sadd key1 1(integer) 1127.0.0.1:6379> sadd key2...

2020-04-17 18:25:52 76

原创 使用openresty通过lua修改请求/响应头
原力计划

openresty介绍在使用nginx时,如果我们想进行开发,开发难度比较大,openresty对nginx核心集成了很多lua三方模块,开发者可以使用lua脚本进行开发,开发者只需了解http协议和lua脚本。openresty你可以理解为支持lua开发的nginx,但是性能比nginx强。openresty可提供:均衡负载、请求路由、安全认证、服务鉴权、流量控制、日志监控服务等。根据op...

2020-04-15 15:58:08 1235

原创 六: redis的list数据类型

六: redis的list数据类型list是一个有序的集合,可以作为队列,栈:集合的双端都是可以进行操作的。命令lpush解释: 往集合左端插入元素,如果键不存在则创建再插入元素,返回集合的长度用法: lpush key value [value …]2.4版本及之后的版本支持多个value,之前的只支持单个value示例:127.0.0.1:6379> lpush k...

2020-03-30 17:52:15 54

原创 docker相关

docker相关centos安装1.安装使用 rpm的安装方式1.1下载rpm包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm1.2安装在上面下载的rpm包的目录下执行一下命令 yum install -y *...

2020-03-30 15:50:16 74

原创 五:redis的hash数据类型常用命令、场景、源码分析

五:redis的hash数据类型常用命令、场景、源码分析哈希数据类型存储key在field和value中,如果存储一个用户的信息key是user:id,field为nickname,age,sex,value存储对应的值,可以快速查找用户信息的某个属性。命令hset解释:设置/更新hash类型的键值对用法: hset key field value本文分析的源码是基于redis...

2020-03-20 18:10:33 49

原创 番外1:redis集群搭建:主从及哨兵模式

redis集群1. 三种集群1.1 主从模式特点 1.主从模式中redis数据库分为两种:主数据库(master)和从数据库(slave) 2.主数据库负责读写,从数据库只能读数据,主数据库实时同步数据到从数据库。 3.一个master可以有多个slave,一个slave只能有一个master 4.master挂了不影响从库的读数据,但是整个集群此时不能写数据,当mas...

2020-03-12 18:14:23 45

原创 truncate与delete的区别

truncate与delete的区别truncatepostgrepsql描述: 快速清空表的所有数据语法:TRUNCATE [ TABLE ] [ONLY] name [* ] [,…][RESTART IDENTITY ] [CONTINUE IDENTITY] [CASCADE | RESTRICT]用途:通常用来快速清空大表的所有数据参数:only: 表示仅...

2020-03-10 15:40:11 78

原创 搭建单元测试以及遇到的问题

搭建单元测试以及遇到的问题目标搭建单元测试,希望能mock部分方法,以及数据库的加载pom<!-- add unit test support --> <dependency> <groupId>org.jmockit</groupId> <artifactId>jmockit</artifactId&g...

2020-03-05 20:07:15 95

原创 四:Redis的字符串类型命令、源码解析、应用场景

四:Redis的字符串类型命令、源码解析、应用场景命令set解释 :设置键的值为字符串,并且可以设置过期时间set key value [ex seconds| px milliseconds] [nx|xx]ex seconds: 设置键多少秒后过期px milliseconds: 设置键多少毫秒后过期nx: 当键不存在,才能设置成功,添加 (可以用来做分布式锁)xx...

2020-03-02 18:12:46 25

原创 postgrepsql源码安装

postgrepsql源码安装源码下载下载地址: https://www.postgresql.org/ftp/source/v11.3/选择对应版本下的tar.gz文件下载。(文件大概20多兆,网速比较慢,我下载了大概半小时)。上传到服务器我这里用的secureCRT终端工具,可以通过rz,sz命令分别进行上传下载,如果你的电脑和服务器墙是通的也可以直接使用scp来上传下载文件。s...

2020-02-27 14:48:47 114

原创 ansible快速入门

ansibleansible是一款用python开发的自动化运维工具,只需要使用ssh协议连接,就可以进行系统管理,自动化执行命令,部署等任务。ansible不需要被控机安装客户端,只需要一台ansible主操作机即可完成所有操作。ansilbe安装 yum install epel-release -y yum install ansible -y // 安装目录 // 配置...

2020-02-27 14:44:12 79

原创 三:Redis为什么使用单线程架构

三:Redis为什么使用单线程架构Redis使用单线程的原因是因为相比多线程速度比较快。速度快体现在两点:访问内存的时间小于线程上下文切换的开销。多路IO复用,epoll模型速度快。1.访问内存的时间小于线程上下文切换的开销从第一篇中我们知道内存的速度大概是100ns,而一次线程上下文切换大概1500ns。线程上下文切换的时间是一次内存访问的15倍,所以Redis使用多线程是得不偿失...

2020-02-19 18:36:03 339

原创 二:Redis的通用命令示例及其源码分析

二:Redis的通用命令示例及其源码分析通用命令指的是对所有数据类型都生效的命令。keys *解释: 显示查看Redis的所有键/匹配指定键用法: keys * / keys pattern keys *示例 // 我们先存三个键 127.0.0.1:6379> set key1 value1 ok 127.0.0.1:6379> set ke...

2020-02-17 19:31:08 39

原创 一:redis是什么、应用场景、安装

一:redis是什么、应用场景、安装redis(remote dictionary server)是一个键值对数据库(key-value)。redis是非常快的,redis速度快的几点因素Redis的所有数据都输存放在内存中的,官方给出每秒可达10万次读写操作。(谷歌给出内存的速度100ns,1s=10^9ns,计算可得每秒大概有100万,官方给出数据是实际测量,理论与实际的应该就是硬件的...

2020-02-12 14:52:45 33

原创 HTTP头--Accept-Language

HTTP头–Accept-Language简介Accept-Language:表示浏览器所支持的语言。当我们在开发国际化的网站时,后端接口的信息需要根据用户所使用的语言返回对应的内容。作为后端我需要前端在请求头的Accept-Language属性声明需要返回的语言。格式Accept-Language: lange-range[weight]示例Accept-Language: zh-...

2020-02-11 14:54:37 456

原创 mysql与postgreqsql的limit语法

mysql与postgreqsql的limit语法mysql的limitlimit n, mn : 偏移量m: 返回数据的最大条数limit 10,10返回第10~20条数据limit 0, 10,返回第0~10条数据。limit n, m 语法等于 limit m offset nm: 返回最大条数n: 偏移量postgrepsql的limitlimit n offs...

2020-02-11 14:21:06 65

原创 string源码浅析

string源码浅析1. 示例先来看几个例子:1.1 示例一public static void main(String[] args) { String s1 = "123"; String s2 = "123"; System.out.println(s1 == s2);}结果是true.s1, s2创建的过程是,先在常量池(常量池属于方法区的一部分)里...

2019-09-25 11:35:41 31

原创 在JAVA中调用JavaScript代码

在JAVA中调用JavaScript代码有些时候,我们在执行JAVA代码的时候,希望能够通过执行其他脚本语言(如js, 修改脚本新逻辑立即生效,不需要重新加载)根据其结果来进行逻辑判断,自java SE 8开始已经集成了Nashorn JavaScript引擎作为JDK的一部分。使用nashorn引擎直接执行脚本查询引擎使用nashornpublic static void main(S...

2019-09-19 20:37:20 78

原创 count(1) 与count(*) 的性能

count(1) 与count(*) 的性能count(expr)count聚合函数统计返回expr表达式值不为Null的行数,返回值为bigint。如果没有匹配到任何行数,则返回0。但是count()又有些不同,count()整张表的行数,不论是否列为Null。myIsammyIsam存储引擎查询count()是非常快速的,因为myIsam独立维护一个值来存储表的记录数,所以统计行数的...

2019-09-09 17:55:48 208

原创 mysql索引浅析

mysql索引浅析注:1. 本文上下文索引的语境是在mysql innodb存储引擎下的索引索引的概念索引是一个数据结构,能够加快sql查询的速度。具体为什么能加快查询,本文后面会详细说明。生活中的索引例子:1.我们在字典中找某个单词,先找找到单词的第一个字母,缩小了26分之一的范围,然后之后的字母继续按照这种方式查找。2.当我进入一个商城的按照分类找到我们要去的具体的店,一般商城...

2019-08-30 18:16:54 69

原创 浅析双亲委派模型

双亲委派模型在类的加载阶段,java使用类加载器来进行类的加载。而这一阶段使用的理论知识就是双亲委派模型。在我们对类进行相等比较时,我们一般默认认为两个对象时同一个类加载器加载的。如果不是同一个类加载器加载即使是同一个类,也会不想等。类的加载器分为三类:Bootstrap ClassLoader:这个是 c++实现的,主要加载 java_home中的lib目录下的类。Extension...

2019-05-05 20:12:52 76

原创 JAVA类加载机制

JAVA类加载机制问题第一个问题package xuelongjiang;class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static int count2 = 0; private Singl...

2019-05-05 19:28:50 83

原创 Integer源码阅读

Integer源码分析一道面试题 /** * @author xuelongjiang */public class Test6 { public static void main(String[] args) { Integer var0 = 100; Integer var1 = 100; Integer v...

2019-04-16 23:05:39 62

原创 一分钟系列:(1+2)*500是如何在JVM中运算的?

一分钟系列:(1+2)*500是如何在JVM中运算的?java之所以能够实现write Once,Run AnyWhere,就在于java文件被编译为class字节码运行于JVM上,而不是像c语言那种编译为二进制文件运行于CPU的寄存器。看如下源码,我们把表达式放在了类的实例方法cal中。public class Test{ public int cal(){ int a = ...

2019-02-19 00:17:40 183

原创 一分钟系列: 读懂GC日志

文章目录一分钟系列: 读懂GC日志开启GC日志GC日志解析一分钟系列: 读懂GC日志开启GC日志 -XX:+PrintGCDetails -Xloggc: xxxx // 开启GC日志,xxxx表示GC日志输出的位置// 虽然输出日志会有性能开销,相比日后观察JVM定位问题这点开销还是值得的。GC日志解析[GC (Allocation Failure) [PSYoungGen:...

2019-02-16 23:49:42 313

原创 一分钟系列:JDK一些常用的命令

文章目录一分钟系列:JDK一些常用的命令java -versionjavac xxx.javajava -jar xxxx.jarjpsjstat -gc pidjmap -histo:live pidjstack pid >xxx一分钟系列:JDK一些常用的命令对程序员来说命令行的效率很多时候比图形界面高很多,所以学会了解命令行的使用能极大的提高我们的效率。本文希望能够帮助读者...

2019-02-15 00:22:47 85

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