自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (1)
  • 收藏
  • 关注

原创 Mysql架构(语句执行过程)

大体上,MySQL 分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、执行器等,以及所有的内置函数(如日期、时间、数学和加密函数等)和跨存储引擎的功能(如存储过程、触发器、视图)存储引擎层负责数据的存储和提取,支持 InnoDB、MyISAM、Memory 等多个存储引擎。MySQL 5.5.5 版本后默认存储存储引擎是 InnoDB。连接器...

2020-03-08 19:28:06 70

原创 Redis文件事件和时间事件

一:文件事件1:文件事件处理器Redis基于Reactor模式开发了自己的网络时间处理器:这个处理器被称为 文件事件处理器。1:文件事件处理器使用IO多路复用来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的 事件处理器2:当被监听的套接字准备好执行 连接应答,读取,写入,关闭等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事...

2020-03-07 14:22:17 552

原创 哨兵机制

Sentinel(哨兵、哨岗)是Redis 的高可用性的解决方案:有一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。一:获取主服务器信息Sentinel 默认每十秒一次,通...

2020-03-07 14:20:57 316

原创 Pipeline和Batch

利用Batch(mget,mset之类的单条命令)处理多个key的命令,一次性将多个命令提交过去,极大的较少了在网络传输方面带来的损耗PipeLine管道  Pipeline可以从client(客户端)打包多条命令后一起发出,redis服务端会在处理完多条命令后将多条命令的处理结果打包到一起返回给客户端,与单条命令顺序执行相比,使用Pipeline极大的减少了客户端与redis se...

2020-03-07 14:18:37 521

原创 CopyOnWriteArrayList

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不...

2019-06-20 15:31:27 808 1

原创 vvv发生的发生发时代发生的发生

vvvvvvvvvv发大水大法师发送到v

2022-04-14 14:52:56 308

原创 Spring:bean 5种依赖注入方式

1:注解注入,@Autowired放在构造器、字段、方法上2:setter 方法注入3:构造器注入,指带有参数的构造函数注入4:静态工厂的方法注入5:实例工厂的方法注入...

2020-03-21 00:00:30 562

原创 Srping:bean循环依赖问题

Spring 为了解决单例的循环依赖问题,使用了三级缓存,递归调用时发现 Bean 还在创建中即为循环依赖单例模式的 Bean 保存在如下的数据结构中:/** 一级缓存:用于存放完全初始化好的 bean **/ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<Strin...

2020-03-20 23:59:40 223

原创 JVM:前端编译优化

Javac 编译器编译过程大致可以分为 1个准备过程,3 个处理过程,分别是:准备过程:初始化插入式注解处理器处理过程:1:解析与填充符号表过程2:插入式注解处理器的注解处理过程(在这个过程里如果产生新的符号,就必须转会到第一个处理过程重新处理)3:分析与字节码生成过程一:解析与填充符号表过程1. 词法、语法分析词法分析是将源代码的字符流转变...

2020-03-20 23:57:57 183

原创 JVM:后端编译优化

即时编译器HotSpot 中的即时编译器有3种,分别称为客户端编译器(Client Complier) 和服务端编译器 (Server Complier),简称为 C1 和 C2,还有一个在JDK10时出现的Graal编译器,长期目标是代替服务端编译器。程序使用哪个编译器取决于虚拟机运行模式,虚拟机会根据自身版本与宿主机器的硬件性能自动选择运行模式。也可以使用 “-clien”或 “-se...

2020-03-20 23:56:51 413

原创 JVM性能调优监控

基础故障处理工具jps 虚拟机进程状况工具可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类(main)函数所在的类、名称以及这些进程的本地虚拟机唯一ID 选项 作用 -q 只输出LVMID -m 输出虚拟机进程启动时传递给主类main()函数的参数 -...

2020-03-12 15:50:37 123

原创 Zookeeper应用场景实现

一:分布式锁zookeeper 分布式锁,如果自己实现的话,大抵的实现方式如下:公平锁在 zookeeper 的指定节点(locks)下创建临时顺序节点 node_n ;获取 locks 下面的所有子节点 children。对子节点按节点自增序号从小到大排序。判断本节点是不是第一个子节点,如果是,则获取到锁。如果不是,则监听比该节点小的那个节点的删除事件。若监听事件生效...

2020-03-12 15:46:41 137

原创 ACL

权限ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,共有5 种权限:write:能够设置znode的值create 能够创建children znodedelete 能够删除children znodeadmin 能够执行setAcl即设置访问控制列表身份认证有4种方式:world:默认方式,相当于全世界都能访问...

2020-03-12 15:46:01 128

原创 ZAB协议

一:协议核心1:崩溃恢复,消息广播2:Zab 节点有三种状态:Following:当前节点是跟随者,服从 Leader 节点的命令Leading:当前节点是 Leader,负责协调事务Election/Looking:节点处于选举状态,正在寻找 Leader3:Zab 的四个阶段选举阶段(Leader Election)Zookeeper 规定所有有效的投票都必须...

2020-03-12 15:45:30 231

原创 ScheduledExecutorService

来解决效率与定时任务的功能,主要作用是可以将定时任务与线程池功能结合使用1:ScheduledExecutorService executor =Executors.newSingleThreadScheduledExecutor();newSingleThreadScheduledExecutor() 在 JDK 的源码里实例化 new ScheduledThreadPoolE...

2020-03-12 15:43:28 176

原创 TheadLocal

一:ThreadLocal的核心机制1:每个Thread线程内部都有一个Map。2:Map里面存储线程本地对象(key)和线程的变量副本(value)Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。所以对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,形成了副本的隔离,互不干扰get(...

2020-03-12 15:42:58 284

原创 ExecutorService参数设置优化

参数的设置跟系统的负载有直接的关系,下面为系统负载的相关参数:tasks,每秒需要处理的的任务数(针对系统需求)threadtasks,每个线程每钞可处理任务数(针对线程本身)responsetime,系统允许任务最大的响应时间,比如每个任务的响应时间不得超过2秒。corePoolSize系统每秒有tasks个任务需要处理理,则每个线程每钞可处理threadtasks个任...

2020-03-12 15:42:15 1796

原创 ExecutorService

ExecutorService 是Excutor 的子接口,在内部添加了比较多的方法。 AbstractExecutorService抽象类 是它的唯一子实现类。ThreadPoolExecutor是 AbstractExecutorService 子类一:Executors 工厂类创建线程池 (有4种不同的线程池对象):1:通过Executors类的newCachedThreadPool...

2020-03-12 15:41:25 247

原创 CompletableFuture区别

Future,FutureTask,CompletionService,CompletableFuture看着两篇就够啦!!!!!!https://blog.csdn.net/f641385712/article/details/83580886https://www.cnblogs.com/dennyzhangdd/p/7010972.html...

2020-03-12 15:33:56 233

原创 ScheduledExecutorService

来解决效率与定时任务的功能,主要作用是可以将定时任务与线程池功能结合使用1:ScheduledExecutorService executor =Executors.newSingleThreadScheduledExecutor();newSingleThreadScheduledExecutor() 在 JDK 的源码里实例化 new ScheduledThreadPoolE...

2020-03-12 15:32:35 158

原创 top K问题

对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆即先将数据集按照Hash方法分解成多个小数据集然后使用Trie树或者Hash统计每个小数据集中的query词频之后用小顶堆求出每个数据集中出频率最高的前K个数最后在所有top K中求出最终的top K。例如:有1亿个浮点数,如何找出其中最大的10000个?最容易想到的方法是将数据全部排序,然后在排...

2020-03-10 18:18:09 98

原创 接口限流算法

漏桶算法漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率.因此,漏桶算法对于存在突发特性...

2020-03-10 18:16:48 128

原创 Hash算法

在同一个版本的Jdk中,HashMap、HashTable以及ConcurrentHashMap里面的hash方法的实现是不同的HashMap采用的是位运算:当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀,所以单从这一点上看,HashTable的哈希表大小选择,似乎更高明些。因为hash结果越分散效果越好。HashTable采用的是直接取模:在取模计算时,如果模数是2的幂,...

2020-03-10 18:15:21 109

原创 HashMap--Java8和Java7

特点初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容) 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀 计算index方法...

2020-03-10 18:14:36 173

原创 CAP

一、CAP的定义Consistency (一致性):“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终...

2020-03-10 10:11:49 194

原创 BASE

CAP理论告诉我们一个悲惨但不得不接受的事实——我们只能在C、A、P中选择两个条件。而对于业务系统而言,我们往往选择牺牲一致性来换取系统的可用性和分区容错性。不过这里要指出的是,所谓的“牺牲一致性”并不是完全放弃数据一致性,而是牺牲强一致性换取弱一致性。下面来介绍下BASE理论。BA:Basic Available 基本可用 整个系统在某些不可抗力的情况下,仍然能够保证“可用性”,即一定时...

2020-03-10 10:11:14 118

转载 分布式事务解决方案

方案1:全局事务(DTP模型)全局事务基于DTP模型实现。DTP是由X/Open组织提出的一种分布式事务模型——X/Open Distributed Transaction Processing Reference Model。它规定了要实现分布式事务,需要三种角色:AP:Application 应用系统 它就是我们开发的业务系统,在我们开发的过程中,可以使用资源管理器提供的事务接口来实现...

2020-03-10 10:10:19 106

原创 分布式事务协议--2PC和3PC

两阶段提交协议 2PC分布式系统的一个难点是如何保证架构下多个节点在进行事务性操作的时候保持一致性。为实现这个目的,二阶段提交算法的成立基于以下假设:该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进行网络通信。 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上,即使节点损坏不会导致日志数据的消失。...

2020-03-10 10:09:25 163

原创 优化:分区

特点分区有利于管理非常大的表,它采用分而治之的逻辑,分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中分区类型range分区给定一个连续区间的范围值进行分区,某个字段的值满足这个范围就会被分配到该分区。适用于字段的值是连续的区间的字段,如 日期范围, 连续的数字。语法create...

2020-03-08 19:34:11 1101

原创 优化:数据碎片

一:数据碎片化原因Mysql引擎不同,碎片化的原因也有所差别。在InnoDB中,了,因而空间也没有真的被释放回收。1:删除一些行,这些行只是被标记为“已删除”,而不是真的从索引中物理删除,所以就没能释放回收。InnoDB的 Purge线程会异步的来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操作系统重新使用,因而会导致页面中存在很多空洞。如果表结构中包含动态长度字段,...

2020-03-08 19:33:04 1257

原创 MEMORY

MEMORY表有下列特征:给Memory表的空间被以小块来分配。表对插入使用100%动态哈希来。不需要溢出区或额外键空间。自由列表无额外的空间需求。已删除的行被放在一个以链接的列表里,并且在你往表里插入新数据之时被重新使用。Memory表也没有通常与在哈希表中删除加插入相关的问题。MEMORY表可以有多达每个表64个索引,每个索引16列,以及3072字节的最大键长度。MEMOR...

2020-03-08 19:30:28 242

原创 MyISAM

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。InnoDB...

2020-03-08 19:29:57 1379

原创 Mysql问题解决思路

数据库层面一:检查问题常用工具1:msyqladmin:MySQL客户端,可进行管理操作2:mysqlshow:功能强大的查看shell命令3:show [SESSION | GLOBAL] variables:查看数据库参数信息4:SHOW [SESSION | GLOBAL] STATUS:查看数据库的状态信息5:information_schema:获取元数据的方法...

2020-03-08 19:29:22 260

原创 AOF详解

AOF 命令同步同步命令到 AOF 文件的整个过程可以分为三个阶段:1:命令传播:Redis 将执行完的命令、命令的参数、命令的参数个数等信息发送到 AOF 程序中。2:缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的 AOF 缓存中。3:文件写入和保存:AOF 缓存中的内容被写入到 AOF 文件末尾,如果设定的 AOF 保存...

2020-03-08 19:26:46 1685

原创 Redis事务内部机制

1:MULTI命令的执行标记着事务的开始2:命令入队客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列里, 然后返回QUEUED, 表示命令已入队。每个Redis客户端都有自己的事务状态,事务状态包含一个事务队列,一个已入队命令的计数器。typedef struct multiState{//事务队列,FI...

2020-03-08 19:26:11 125

原创 Redis结合LUA的使用

前文:redis事务的实现原理是把事务中的命令先放入队列中,当client提交了exec命令后,redis会把队列中的每一条命令按序执行一遍。如果在执行exec之前事务中断了,那么所有的命令都不会执行;如果执行了exec命令之后,那么所有的命令都会按序执行。但如果在事务执行期间redis被强制关闭,那么则需要使用redis-check-aof 工具对redis进行修复,删除那些部分执行的命令。...

2020-03-08 19:21:52 196

原创 Redis中Bitmap的使用

优势1.基于最小的单位bit进行存储,所以非常省空间。2.设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的。3.二进制数据的存储,进行相关计算的时候非常快。4.方便扩容限制redis中bit映射被限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越多。操作命令...

2020-03-08 19:21:30 736

原创 Redis常用数据结构及内部编码

1,String: raw,int , embstr2,hash: hashtable,ziplist3:list:linkedlist,ziplist4:set:hashtable,intset5:zset:skiplist,ziplist设计的好处:1:可以改进内部编码,对外的数据结构和命令没有影响2:多种内部编码实现可以在不同场景下发挥各自优势,例如 z...

2020-03-07 14:37:38 152 1

原创 Redis内存回收策略

内存上限Redis可以通过 maxmemory 参数来限制最大可用内存,主要为了避免Redis内存超过操作系统内存,从而导致服务器响应变慢甚至死机的情况。maxmemory 参数限制的是Redis的对象内存大小,也就是 used_memory 对应的内存大小。由于内存碎片的存在,所以Redis服务器实际占用的内存是要超过 maxmemory 的。所以我们在设置Redis内存上限的时候要预留...

2020-03-07 14:36:01 160

原创 Redis优化--LRU和LFU区别

一:LRURedis维护了一个24bit(位)时钟,可以简单理解为当前系统的时间戳,每隔一定时间会更新这个时钟。每个key对象内部同样维护了一个24位的时钟,当新增key对象的时候会把系统的时钟赋值到这个内部对象时钟。比如我现在要进行LRU,那么首先拿到当前的全局时钟,然后再找到内部时钟与全局时钟距离时间最久的(差最大)进行淘汰,这里值得注意的是全局时钟只有24位,按秒为单位来表示才能存储19...

2020-03-07 14:35:25 2095

空空如也

空空如也

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

TA关注的人

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