自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis为什么变慢了

Redis为什么变慢了?常见延迟问题定位与分析Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Redis 的内部实现原理,在排查问题时就会一头雾水。Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。以下这篇文章我们就来分析一下 Redis 在使用过程中,经常会遇到的延迟问题以及如何定位和分析。文章目录链路追踪基准性能使用了复杂度过高的命令操作、存储大的big

2022-05-19 15:55:18 255

原创 volatile的作用及原理

前言voliate关键字的两个作用:1、 保证变量的可见性:当一个被volatile关键字修饰的变量被一个线程修改的时候,其他线程可以立刻得到修改之后的结果。当一个线程向被volatile关键字修饰的变量写入数据的时候,虚拟机会强制它被值刷新到主内存中。当一个线程用到被volatile关键字修饰的值的时候,虚拟机会强制要求它从主内存中读取。2、 屏蔽指令重排序:指令重排序是编译器和处理器为了高效对程序进行优化的手段,它只能保证程序执行的结果时正确的,但是无法保证程序的操作顺序与代码顺序一致。这在单线程

2022-05-06 17:08:23 2210

原创 基于Apollo远程配置中心+MybatisPlus的多数据源配置组件

只是服务员公司内部架构所开发,只是服务于公司项目的架构,无法通用全部项目,若要通用,则还需要进行通用化改造,本文只是提供一个思路package com.iskytrip.mybatis.inject.mybatis.dataSource;import com.iskytrip.mybatis.inject.mybatis.dataSource.config.ISkyTripDataSourceConfiguration;import org.springframework.context.an.

2020-12-29 17:22:35 1981 1

原创 Redis主从复制原理总结

和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。全量同步Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:- 从服务器连接主服务器,发送SYNC命令;- 主服务器接收到SYNC命名后,开始执行BGS...

2020-09-10 11:40:02 209

原创 为什么数据库读写分离可以提高性能

虽然知道处理大数据量时,数据库要做读写分离,但是为什么读写分离可以提高性能呢?下面是搜来的一些解释,看看再说!一 什么是读写分离MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库。当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。可以看下这张图:二 ...

2020-09-10 10:56:53 854

原创 mycat实战之扩容

扩容是项目投入生产之后,经过一定的数据量的积累,达到一定的量级之后,需要执行的操作。一、 离线扩容(摘自官方)工具目前从 mycat1.6 开始支持。一、准备工作1、mycat 所在环境安装 mysql 客户端程序。2、mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包。3、对扩容缩容的表所有节点数据进行备份,以便迁移失败后的数据恢复。二、扩容缩容步骤1、复制 schema.xml、rule.xml 并重命名为 newSchema.xml、newRule.xml 放于

2020-09-10 10:40:57 904

原创 TCP、UDP和HTTP区别详解

http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接.

2020-06-24 16:40:09 3250

原创 二进制运算符

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神秘的面纱吧。一、Java内置的进制转换有关十进制转为二进制,和二进制转为十进制这种基本的运算方法这里就不展

2020-06-23 10:28:52 2580

原创 二进制与十进制互转

二进制数转换成十进制数的方法如下:1、正整数转成二du进制,除二取余zhi,然后倒序排列dao,高位补零。将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就可以。2、42除以2得到的余数分别为010101,然后倒着排一下,42所对应二进制就是101010。3、计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零,所说,如图3所示,42转换成二进制以后就是。00101010,也即规范

2020-06-22 17:11:01 4470

原创 如何保证 RocketMQ 不丢失消息

0x00. 消息的发送流程一条消息从生产到被消费,将会经历三个阶段:生产阶段,Producer 新建消息,然后通过网络将消息投递给 MQ Broker存储阶段,消息将会存储在 Broker 端磁盘中消息阶段, Consumer 将会从 Broker 拉取消息以上任一阶段都可能会丢失消息,我们只要找到这三个阶段丢失消息原因,采用合理的办法避免丢失,就可以彻底解决消息丢失的问题。0x01. 生产阶段生产者(Producer) 通过网络发送消息给 Broker,当 Broker 收到之后.

2020-06-19 15:50:34 516

原创 RocketMQ原理解析

RocketMQ原理解析RocketMQ部署集群.jpg说明:1.NameServer名称服务NameServer是没有状态的,即NameServer中的Broker和topic等状态信息(通过其他角色上报获取)都是保存在内存中的,不会持久化存储(可通过配置实现),集群可以横向扩展。主要功能如下:a.接收Broker(master和slave)启动时的注册路由信息;b.为producer和consumer提供路由服务,即通过topic名字获取所有broker的路由信息;c.接...

2020-06-19 11:41:00 457

原创 RocketMQ的消费端负载均衡和Rebalance机制

从源码看RocketMQ的消费端负载均衡和Rebalance机制Consumer的负载均衡RocketMQ在消费端的负载均衡如下图所示,各个partition均匀分布在各个consumer上,如下图所示:所有consumer依次消费每一个partition,如果partition数量不是consumer的整数倍,则排在前面的consumer会消费更多的partition,下面可以看看consumer的实现。Rebalance的实现RocketMQ的consumer负...

2020-06-19 11:35:31 1791

原创 kafka原理(转载)

本文主要讲解 Kafka 是什么、Kafka 的架构包括工作流程和存储机制,以及生产者和消费者。最终大家会掌握 Kafka 中最重要的概念,分别是 Broker、Producer、Consumer、Consumer Group、Topic、Partition、Replica、Leader、Follower,这是学会和理解 Kafka 的基础和必备内容。定义Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用与大数据实时处理领域。消息队列Kafka

2020-06-16 14:37:03 270

原创 100道MySQL常见面试题总结(转载)

前言本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水.前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来.因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要

2020-06-15 15:48:27 410

转载 redis常见面试题(转载)

本文的面试题如下:Redis 持久化机制缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题热点数据和冷数据是什么Memcache与Redis的区别都有哪些?单线程的redis为什么这么快redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构redis的过期策略以及内存淘汰机制【~】Redis 为什么是单线程的,优点如何解决redis的并发竞争key问题Redis 集群方案应该怎么做?都有哪些方案?有没有尝试进行多机redis 的部署?如何保证数据一致的?对于大量的

2020-06-15 11:09:07 320

原创 redis主从复制下哨兵模式---选举原理(转载)

一.哨兵机制任务:  有了主从复制的实现以后,如果想对主服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。顾名思义,哨兵的含义就是监控redis系统的运行状态。可以启动多个哨兵,去监控redis数据库的运行状态。其主要功能有两点:  a、监控所有节点数据库是否在正常运行。  b、master数据库出现故障时,可以自动通过投票机制,从slave节点中选举新的master,实现将从数据库转换为主数据库的自动切换。  一个一主多从的Redis系统中,可以使用多个哨兵进行监控.

2020-06-15 10:04:26 2925

原创 分布式解决方案(redis缓存篇)(转载)

redis 是一个基于内存的高性能 key-value数据库支持丰富的数据类型(String,List , Set ,Sorted Set,Hash)redis中的单个value的存储限制是1G,比Memcached的1MB要强大太多哎呀,还是以问答的方式来写这篇文章吧!1.redis有什么优缺点redis是内存数据库,所以当数据量达到一定程度的时候,单机版的必然是其瓶颈所在,这个时候我们就需要引入主从复制方案,用了主从复制之后我们就会发现,主库值负责读写,从库负责读,数据量达到千...

2020-06-12 18:23:53 250

原创 分布式缓存redis常见问题及解决方案(转载)

一、redis和memcache有什么区别?redis是现在的企业使用最广泛缓存技术,而在redis以前memcache是一些公司最常用的缓存技术,它们比较相似,但有如下一些区别:(1)redis相对于memcache来说拥有更丰富的数据类型,可以适用更多复杂场景。(2)redis原生就是支持cluster集群模式的,但memcache没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。(3)redis使用的是单核,memcache使用的是多核,所以redis在存储小数据的时候性能比

2020-06-12 17:51:04 451

原创 mycat的10种分片规则(转载)

所有的分片规则配置的tableRule标签中:rule标签中的columns标签内填写要分片的表字段,algorithm标签内填写分片所使用的自定义函数名,要与function函数中的name属性保持一致function函数中的property标签内配置自定义参数。1)枚举法:sharding-by-intfile<tableRule name="sharding-by-intfile"> <rule> <columns>user_...

2020-06-12 16:53:25 145

原创 mycat 9066管理端口 常用命令(转载)

1、连接mycat 9066管理端口  命令:mysql -uroot -proot -P9066 -h127.0.0.1  -u:用户名  -p:密码  -P:端口  -h:ip地址例:linux路径切换到mycat安装路径的bin目录中:输入命令  显示如此则登录成功。2、显示后端物理库连接信息,包括当前连接数,端口等信息。   命令:Show@@backend  3、显示当前前端客户端连接情况  命令:Show@@connection...

2020-06-12 11:02:33 176

原创 Mycat之逻辑库、表分片配置(转载)

Mycat之逻辑库、表分片配置一、配置逻辑库(shcema)Mycat作为一个中间件,实现mysql协议,那么对前端应用连接来说就是一个数据库,也就是有数据的配置,mycat的数据库配置是在schema.xml中配置,配置好后映射到server.xml里面的用户就可以了。<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xm

2020-06-12 10:58:38 471 1

原创 当mysql数据库主数据库down掉后,如何进行主从切换(转换)

mysql主从切换在真实的生产环境中,总会有一些意外。当企业的数据库集群有机器不幸down掉的时候,怎么把从库切换成主库呢。可以总结为如下步骤一.登录从库关闭io进程,确保relay log已被完全执行,并根据当前pos选取出下一个master。mysql -uroot -ptqw961110stop slave io_thread; #关闭io进程show processlist; #查看还有什么进程在运行。当进程运行到最后,显示Slave h...

2020-06-12 10:43:41 953

原创 基于Mycat实现读写分离(转载)

随着应用的访问量并发量的增加,应用读写分离是很有必要的。当然应用要实现读写分离,首先数据库层要先做到主从配置,本人前一篇文章介绍了mysql数据库的主从配置方式即:《mysql数据库主从配置》。应用实现读写分离至少有两种方法:应用本身通过代码实现,例如基于动态数据源、AOP的原理来实现写操作时用主数据库,读操作时用从数据库。 通过中间件的方式实现,例如通过Mycat,即中间件会分析对应的SQL,写操作时会连接主数据库,读操作时连接从数据库。本篇文章是介绍通过Mycat中间件的方式实现读写分离。

2020-06-11 18:47:48 112

原创 MyCat学习笔记(转载)

一、MyCat简介1.什么是MyCatMyCat是目前最流行的基于Java语言编写的数据库中间件,是一个实现了MySql协议的服务器,其核心功能是分库分表。配合数据库的主从模式还可以实现读写分离。MyCat官网:http://www.mycat.io/2.使用MyCat后的架构图image.png3.使用MyCat的优势3.1数据量级单一的MySql数据存储量和操作量级有限,MyCat可以管理若干MySql数据库,可以实现数据库的存储和操作。3.2 开源性质M

2020-06-11 16:19:50 165

原创 Mysql进阶之Mysql-proxy的读写分离(转载)

Mysql-proxy简介:mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy...

2020-06-11 15:45:17 180

原创 mysql数据库主从同步的3种一致性方案实现,及优劣比较(转载)

数据主从同步的由来互联网的很多业务,特别是在高并发的场景下,基本都是读远远大于写,如果数据库读和写的压力都同在一台主机上,这显然不太合理。于是,把一台数据库主机分为单独的一台写主库(主要负责写操作),而把读的数据库压力分配给读的从库,而且读从库可以变为多台,这就是读写分离的典型场景如下:为了进一步的降低数据库端的压力(高并发的瓶颈),这个时候也会在业务层部署分布式缓存集群(redis、memcached)等,把读的压力转移给应用服务器端,其实与数据主从的设计是遵循同一个原则,降低后端数据库的...

2020-06-11 10:16:09 664

原创 zookeeper分布式锁原理(转载)

一、分布式锁介绍分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。二、架构介绍在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统架构图解释:左边的整个区域表示一个Zookeeper集群,locker是Zookeeper的一个持久节点,node_1、node_2、node_3是locker这个持久节点下面的临时顺序节点。client_1、client_2、client_n表示多个客户端,Service表示需要互斥访问的共享资源。三

2020-06-10 18:30:04 80

原创 Redis官方分布式锁的实现-Redlock实现原理(转载)

前文笔者介绍了目前市面上见的比较多的Redis+lua分布式锁的实现,大概有如下三个要点:set命令要用 setkey value px milliseconds nx;保证原子性value要具有唯一性,释放锁时要验证value值,不能误解锁;解锁要使用lua脚本,也是为了保证原子性Redis官方也指出该方法有安全隐患就是在主从复制模式下会导致两个线程可能会同时持有一个锁,如果业务允许如此,则推荐使用这种方案,毕竟实现简单,易维护。如果对锁的要求非常高的场景,Redis官方建议使用RedLoc

2020-06-10 17:16:10 351 1

原创 Fescar分布式事务实现原理解析探秘(转载)

fescar的TXC模型上图为fescar官方针对TXC模型制作的示意图。不得不说大厂的图制作的真的不错,结合示意图我们可以看到TXC实现的全貌。TXC的实现通过三个组件来完成。也就是上图的三个深黄色部分,其作用如下,:TM:全局事务管理器,在标注开启fescar分布式事务的服务端开启,并将全局事务发送到TC事务控制端管理 TC:事务控制中心,控制全局事务的提交或者回滚。这个组件需要独立部署维护,目前只支持单机版本,后续迭代计划会有集群版本 RM:资源管理器,主要负责分支事务的上报,本地事务

2020-06-10 15:46:05 133

原创 RocketMQ 事务机制的实现流程(转载)

深入探究 RocketMQ 事务机制的实现流程,为什么它能做到发送消息零丢失?消息丢失的第一个问题:订单系统推送消息领丢失既然我们已经明确了消息在基于MQ传输的过程中可能丢失的几个地方,那么我们接着就得一步一步考虑如何去解决各个环节丢失消息的问题,首先要解决的第一个问题,就是订单系统推送消息到MQ的过程中,可能消息就丢失了。之前我们也说过了,可能在订单系统推送消息到MQ的过程中,就因为常见的网络故障之类的问题,导致消息就丢失了,这里我们可以看一下下图中的示意。而在RocketMQ中.

2020-06-09 17:21:33 471

原创 分布式事务解决方案(转载)

5种分布式事务解决方案优缺点对比背景分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。ACID指数据库事务正确执行的四个基本要素:原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)CAPCAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容忍.

2020-06-09 17:19:59 167

原创 springboot启动原理及bean的初始化和自动注入

@SpringBootApplicationpublic class ServletInitializer extends SpringBootServletInitializer { public static void main(String[] args) throws Exception { SpringApplication app = new SpringApplication(ServletInitializer.class);//创建SpringApplication对.

2020-05-13 10:01:58 3103 1

原创 MapperScannerRegistrar源码解读

mybatis注册bean有两种方式,一种是通过扫描@Mapper注解,一种是通过@MapperScan注解扫描指定的包路径,两种方式大同小异,唯一的区别是前者是将具有添加了该注解的类注册为mybatis的bean,后者是通过将该注解所指定的包下的所有接口类注册为mybatis的bean,结合上篇文章,本文主要解释的是后者。源码如下:该类通过@MapperScan通过中的@import注解导入...

2020-05-08 11:34:21 1462

原创 基于注解配置mybatis及如何解析mybatis的配置文件

本篇文章讲述的基于注解配置mybatis及如何解析mybatis的配置文件,下一章会讲解mybatis如何具体结合spring来生成对应的bean代理对象@Configuration("dataSourceConfig")//定义bean配置@MapperScan(basePackages = DataSourceConfig.DaoPackage, sqlSessionFactoryRe...

2020-04-27 17:48:41 710

原创 Java虚拟机相关

1.JAVA内存结构Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、堆、本地方法栈、程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区。1.1 程序计数器每个线程拥有一个PC寄存器在线程创建时创建指向下一条指令的地址执行本地方法时,PC的值为undefined1.2 方法区保存装载的类信息  类型的常量池...

2020-01-07 15:48:39 115

原创 Java动态代理——cglib动态代理解析

名词解释 静态代理:编译期就已确定代理对象。即编码出代理类。 动态代理:运行时动态生成代理对象。可对被代理类做出统一的处理,如日志打印,统计调用次数等。 cglib动态代理:cglib工具包实现的动态代理生成方式,通过字节码来实现动态代理,不需要被代理类必须实现接口。 1. 举例使用cglib代理需要引入两个包,maven的话包引入如下 ...

2020-01-06 11:02:02 817 1

原创 Java动态代理——JDK动态代理解析

Java设计模式之JDK动态代理原理名词解释 静态代理:编译期就已确定代理对象。即编码出代理类。 动态代理:运行时动态生成代理对象。可对被代理类做出统一的处理,如日志打印,统计调用次数等。 JDK动态代理:即JDK中自带的动态代理生成方式。JDK动态代理的实现依赖于被代理类必须实现自接口。 动态代理核心源码实现public Object getProx...

2020-01-06 10:47:30 110

原创 Java设计模式——解释器模式(详解版)

模式的定义与特点解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。这里提到的文法和句子的概念同编译原理中的描述相同,“文法”指语言的语法规则,而“句子”是语言集中的元素。例如,汉语中的句子有很多,“我是中国...

2020-01-03 17:53:50 567

原创 Java设计模式——备忘录模式(详解版)

模式的定义与特点备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。备忘录模式是一种对象行为型模式,其主要优点如下。提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不...

2020-01-03 17:47:59 819

原创 Java设计模式——访问者模式(Visitor模式)详解

模式的定义与特点访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。访问者(Visitor)模式是一种对象行为型模式,其主要优点如下。扩展性好。能够在不修改对象结构中的元素的情...

2020-01-03 17:30:22 753

空空如也

空空如也

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

TA关注的人

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