自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL体系结构及运行原理

MySQL体系结构MySQL体系结构图如下:解释:Client Connectors(接入方)接入方式有很多,支持协议很多。Management Serveices & Utilities系统管理和控制工具,mysqldump、 mysql复制集群、分区管理等。Connection Pool(连接池)管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。SQL Interface(SQL接口)接受用户的SQL命令,并且返回用户需

2021-09-17 09:58:21 415

原创 Spring Bean循环依赖

多个Bean之间互相依赖并形成一个闭环叫做循环依赖。Bean的依赖注入分为构造器注入和Setter注入两种方式。 在采用构造器注入的方式配置Bean时,很可能会产生循环依赖的情况,Spring启动时会抛出BeanCurrentlyInCreationException异常。如果采用构造器注入方式,解决循环依赖的手段是打破循环,可以让Spring懒加载其中一个Bean(使用@Lazy注解),不完全初始化Bean,创建一个代理然后将它注入另一个Bean,注入的Bean在第一...

2021-08-27 15:22:33 146

原创 MySQL索引

定义索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。正确的创建合适的索引是提升数据库查询性能的基础。索引的作用1、索引能极大的减少存储引擎需要扫描的数据量;2、索引可以把随机IO变成顺序IO(覆盖索引);3、索引可以帮助我们在进行分组、排序等操作时,避免使用临时表;MySQL为什么使用B+tree作为索引的结构二叉查找树(Binary search tree)二叉查找树会有存在不平衡的情况导致查找效率不稳定,极端情况会成为链表的形式。二叉树

2021-07-08 15:36:17 128

原创 MySQL事务、锁与MVCC

事务事务含义:组成单个逻辑单元的一系列操作。开启事务mysql中开启事务: begin / start transaction -- 手工 commit / rollback -- 事务提交或回滚 set session autocommit = on/off; -- 设定事务是否自动开启JDBC编程: connection.setAutoCommit(boolean);Spring事务AOP编程:...

2021-07-06 16:14:44 128

原创 Redis Cluster

Redis主备集群的每个节点存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应。由于Redis是基于内存存储的,因此这个问题就显得尤为突出。在redis3.0之前,通过在客户端去做的分片,通过hash环的方式对key进行分片存储。sharding分片(客户端分片)虽然能解决各节点的存储压力,但是导致维护成本高、增加/移除节点比较繁琐。因此在redis3.0以后的版本最大的一个好处就是支持集群功能,集群中至少应该有奇数个节点,所以至少有三个节点,官方推...

2021-07-02 10:17:38 51

原创 Redis主备+哨兵

虽然Redis有持久化功能保障Redis服务器宕机也能恢复并且只有少量数据损失,但由于所有数据都在一台服务器上,如果服务器出现硬盘故障,那就算有备份也不能避免数据丢失的问题。而且在实际生产环境中,我们不能只使用一台Redis服务器作为缓存服务器,必须要多台服务器,避免单点故障。主从复制 复制的作用是把Redis的数据复制多个副本部署在不同的服务器上,如果其中一台服务器出现故障,也能快速迁移到其他服务器上提供服务。主从复制就是我们常见的master...

2021-07-02 10:05:10 814

原创 Redis数据类型与结构

Redis主要支持五种数据类型:String、List、Hash、Set、SortedSet。后续添加了HyperLogLog类型。字符串类型 String类型底层采用int、SDS(Simple Dynamic String)类型来存储字符串内容。int用来存放整型数据,SDS存放字节/字符串和浮点型数据。在C的标准字符串结构下进行封装来提升基本操作的性能,同时也充分利用已有的C的标准库简化实现逻辑。可以在redis的源码中【sds.h】中看到sds的结构如下:typede...

2021-07-02 09:55:54 108

原创 Redis原理

过期时间Redis提供两个设置过期时间的方式: expire key seconds setex(String key, int seconds, String value) 实现过期的原理: 消极方式(passive way):在主键被访问时如果发现它已经失效,那么就删除它; 积极方式:周期性的从设置了过期时间的key中选择一部分的key进行删除; 随机测试20个带有timeout信息的key,对已经失效的key进行删除。 如果超过25%的key被

2021-06-30 11:26:38 123

原创 Redis常用命令

Redis基础命令 info:查看系统信息; select:选择Keyspace; flushdb:清空当前键空间的数据; flushall:清空所有的键空间的数据; dbsize:查看当前键空间大小; save:人工触发持久化; quit:退出client连接; Redis键命令 set:set key value,设置键值; del:del key,删除键值; keys:keys * ,查找所有符合给定.

2021-06-30 11:19:38 336

原创 Redis安装与启动

1.解压Mac下载完Redis的tar包后需要解压。输入tar -zxvf redis-2.8.0.tar.gz命令来解压tar包。2.安装由于此Redis是需要编译安装的,因此进入解压后的Redis目录,执行make命令进行编译。编译后提示可以执行make test命令来进行安装测试,看有没有安装成功,如下图:测试完成后,如果成功会有如下提示:3.启动 进入src目录,执行./redis-server,启动Redis服务端。这种方式会占用命令行。也可以执行./re

2021-06-30 11:17:27 139

原创 Zookeeper完全分布式集群的搭建

一、集群模式1、单机模式 在zoo.cfg中只配置一个server.id就是单机模式了。这种模式下,如果当前主机宕机,那么所有依赖于当前zookeeper服务工作的其他服务器都不能再进行正常工作,发生单点故障。所以这种模式一般用在测试环境。2、伪分布式 在zoo.cfg中配置多个server.id,其中IP都是当前机器,而端口各不相同,启动时就是伪集群模式了。这种模式和单机模式产生的问题是一样的,也是用在测试环境中。3、完全分布式 ...

2021-06-11 10:54:27 382 1

原创 Zookeeper

ZooKeeper是一种分布式协调服务。所谓分布式协调服务,可以在分布式系统中共享配置,协调锁资源,提供命名服务。ZooKeeper 的数据模型 ZooKeeper 的数据模型像数据结构当中的树,也很像文件系统的目录。树是由节点所组成,ZooKeeper 的数据存储也同样是基于节点,这种节点叫做Znode。但是,不同于树的节点,Znode 的引用方式是路径引用,类似于文件路径:/ 动物 / 仓鼠/ 植物 / 荷花这样的层级结构,让每一个 Znode 节点拥有...

2021-06-03 19:18:27 82

原创 十种排序算法

十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。1、冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也

2021-06-01 17:49:55 76

原创 Nacos

简介Nacos既可以当服务发现服务器也可以当配置服务器。相应功能的数据持久化位置如下:服务发现组件 ~/nacos/naming配置服务器 配置数据:$NACOS_HOME/data/derby-data 快照等:~/nacos/cofig服务注册与发现首先保证nacos服务端与客户端版本兼容,可以看使用的springcloud-alibaba依赖的nacos-client版本,然后下载对应的服务端版本。服务注册启动服务端下载好n...

2021-06-01 14:55:32 200

原创 SPI(Service Provider Interface)机制

SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模

2021-05-28 19:33:39 196

原创 JAVA内存模型(JMM)

线程通信机制线程间的通信无非通过两种方式实现,一种是内存共享,另一种是消息传递。Java采用的是内存共享的方式。JMM内存模型Java线程间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,它不对应某一个具体硬件。它涵.

2021-04-30 17:07:09 185 2

原创 内联函数

在说内联函数之前先说说函数的调用过程: 首先调用函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。也就是通常说的压栈和出栈。因此,函数调用要有一定的时间和空间方面的开销。那么对于那些函数体代码不是很大,又频繁调用的函...

2019-09-23 17:28:06 180

原创 Dubbo分布式服务框架

简介: Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo总体架构,如图所示...

2018-07-10 09:47:43 263

原创 远程调用的几种方式

      在分布式服务框架中。最基础的问题就是远程服务是怎么通讯的。首先来看看计算机系统网络通信的基本原理。网络通信须要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现。当中传输协议有tcp、udp等等。tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议。网络IO。主要有bio、 nio、aio三种方式,全部的分布式应用通讯都基于这个原理而实现,...

2018-07-04 14:38:42 6890

空空如也

空空如也

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

TA关注的人

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