自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis——客户端与服务端底层结构属性

clients属性,一个链表,保存了所有与服务器连接的客户端的状态结构分为两类主要了解通用属性fd属性记录了客户端正在使用的套接字描述符:根据客户端类型的不同,fd属性的值可以是-1或者是大于-1的整数:默认情况下,一个连接到服务器的客户端是没有名字的CLIENT setname命令可以为客户端设置一个名字标志属性flags记录了客户端的角色(role)以及客户端目前所处的状态客户端状态的输入缓冲区用于保存客户端发送的命令请求:保存执行命令所得的命令回复每个客户端都有两个输出缓冲区,一个缓冲区大小是固定的,

2022-06-30 22:09:18 329 1

原创 Redis——Redis的专属事件

Redis服务器是一个事件驱动程序,服务器需要处理两类事件:正在上传…重新上传取消Redis基于Reactor模式开发了自己的网络事件处理器:文件事件处理器正在上传…重新上传取消正在上传…重新上传取消多个文件事件可能会并发地出现,但I/O多路复用程序总是会将所有产生事件的套接字都放到一个队列里面,通过这个队列,有序、同步、每次一个套接字的方式向文件事件分派器传送套接字正在上传…重新上传取消文件分派器根据套接字产生的事件的类型,调用相应的事件处理器事件处理器是一个个函数,定义了某个事件发生时,服务器应该执行的

2022-06-30 21:45:13 207

原创 Redis——AOF持久化

AOF通过保存Redis服务器所执行的写命令来记录数据库状态可以分为命令追加、文件写入、文件同步三个步骤当AOF持久化功能处于打开状态时,服务器执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾Redis的服务器进程是一个事件循环,循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件负责执行像serverCron函数这样需要定时运行的函数服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将a

2022-06-30 21:37:39 170

原创 Redis——RDB文件与持久化

数据库状态:Redis服务器中的非空数据库以及它们的键值对因为Redis是内存数据库,需要办法将内存中的数据库状态保存到磁盘,否则服务器进程退出,服务器中的数据库状态也会消失不见RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行两个Redis命令可以用于生成RDB文件,一个是SAVE,一个是BGSAVESAVE命令会阻塞Redis服务器进程BGSAVE命令会派生出一个子进程负责创建RDB文件BGSAVE命令执行期间,SAVE命令和BGSAVE命令会被服务器拒绝时间工作由rdb.c/rdbSave函

2022-06-30 21:29:50 305

原创 Redis——单机数据库的实现

Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中db数组的每个项都是一个redis.h/redisDb结构每个redisDb结构代表一个数据库在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库dbnum属性的值由服务器配置的database选项决定,默认情况下为16每个Redis客户端都有自己的目标数据库,每当客户端执行数据库读写命令时,目标数据库就是这些命令的操作对象默认情况下是0号数据库,客户端可以执行SELECT 命令来

2022-06-07 23:44:24 409

原创 Redis——Redis中的对象与编码需要合理的结合

Redis使用对象来表示数据库中的键和值,每当我们创建一个键值对,至少创建两个对象每个对象都由一个redisObject结构表示键总是一个字符串对象 encoding属性记录了对象所使用的编码,也就是这个对象使用了什么数据结构作为对象的底层实现 字符串对象的编码可以是int、raw或者embstr如果字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里,并将字符串对象的编码设置为int如果保存的是字符串值,并且这个字符串值的长度大

2022-06-05 20:05:54 102

原创 Redis——深入探究Redis中的数据结构

简单动态字符串(SDS)自己构建的抽象类型,SDS用作Redis的默认字符串表示C字符串用在打印日志这种无须对字符串值进行修改的地方SDS的定义SDS和C字符串的区别 有len,获取SDS长度的复杂度仅为O(1),C字符串需要遍历 SDS的API需要对SDS修改时,SDS会先检查SDS的空间是否满足修改所需的要求,不满足的话API会自动扩展SDS的空间,然后再执行,杜绝缓冲区溢出 SDS通过未使用空间实现了空间预分配和惰性空间释放两种优化策略,避免内..

2022-05-26 16:50:46 121

原创 MySQL——如何让你的查询更加高效?全方面优化查询数据

查询性能优化优化数据访问 查询不需要的记录 MySQL是先返回全部结果集再进行计算 多表关联时返回全部列 总是取出全部列 去除全部列会让优化器无法完成索引覆盖扫描这类优化 重复查询相同的数据 比较好的方案是:初次查询时将这个数据缓存起来,需要的时候从缓存中取出 衡量查询开销的三个指标:响应时间 扫描的行数 返回的行数响应时间看到时先想想这是否一个合理的值这个查询需要哪些索引,执行计划是什么,需要多少个顺序和随机IO扫描的行数和返回

2022-05-26 11:01:16 1633

原创 MySQL——索引概述以及创建高性能索引中常用思想与策略总结

高性能索引索引的类型B-Tree索引MyISAM使用前缀压缩技术使得索引更小InnoDB按照原数据格式进行存储MyISAM索引通过数据的物理位置引用被索引的行InnoDB根据主键引用被索引的行B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同B-Tree索引能够加快访问数据的速度,存储引擎不再需要全表扫描来获取需要的数据B-Tree对索引列是按顺序组织存储的,很适合查找范围数据索引对多个值进行排序的依据是CREATE TABLE语句中定义索

2022-05-26 10:43:51 140

原创 MySQL——关于表的那些设计与重构优化

MySQL表设计中的陷阱太多的列MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价非常高MyISAM的变长行结构和InnoDB的行结构总是需要转换,转换的代价依赖于列的数量。太多的关联MySQL限制了每个关联操作最多只能有61张表,单个查询最好在12个表以内做关联防止过多使用枚举不要害怕使用NULL当确实需要表示未知值时不要害怕使用NULL范式和反

2022-05-26 10:14:43 345

原创 MySQL——关于数据类型的一些基本优化原则

数据类型优化优化原则越小越好:使用可以正确存储数据的最小数据类型简单就好尽量避免NULL:可为NULL的列使得索引、索引统计和值比较都更复杂为列选择数据类型的顺序第一步:确定合适的大类型:数字、字符串、时间等第二步:选择具体类型整数类型如果存储整数,可以使用:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT整数运算一般使用64位的BIGINT整数,MySQL为整数指定宽度没有意义,只是规定了MySQL的一些交互工具用来显示字符的个数实数类

2022-05-26 09:55:09 201

原创 MySQL——逻辑架构知识梳理与精华点睛

MySQL逻辑架构最上层不是MySQL独有的 负责连接处理、授权认证、安全等等第二层是核心服务功能,包括查询解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等第三层包含存储引擎。服务器通过API与存储引擎进行通信。存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信。第一步:连接管理与安全性第二步:优化与执行解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引.

2022-05-26 09:47:08 96

原创 JAVA并发编程——源码原理全面剖析与重点梳理

帧与帧栈每个线程有一块栈内存 每个栈由多个栈帧组成,每个栈帧对应每次方法调用占用的内存 每个线程只能有一个活动栈帧,对应当前正在执行的那个方法线程上下文切换线程的CPU时间片用完 垃圾回收 有更高优先级的线程需要运行 线程自己调用了sleep、yield、wait、join、park、synchronized、lock等方法其中程序计数器的作用操作系统保存当前线程的状态,记住下一条jvm指令的执行地址,用于恢复线程的状态PS:状态:程序计数器、栈中每个帧栈的信息线程状态

2022-05-25 15:11:58 1199 1

原创 JAVA并发编程代码使用的相关知识点梳理

创建和运行线程方法一:直接使用Thread// 构造方法的参数是给线程指定名字,,推荐给线程起个名字Thread t1 = new Thread("t1") { @Override // run 方法内实现了要执行的任务 public void run() { log.debug("hello"); }};t1.start();方法二:使用Runnable配合Thread把【线程】和【任务】(要执行的代码)分开,Thread 代表线程,Runnable 可运行的任务(线程

2022-05-25 14:27:25 292

原创 JVM——锁优化的简单概述

自旋锁共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和恢复线程并不值得可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁。自适应自旋:如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而允许自旋等待持续相对更长的时间锁消除锁消除是指虚拟机即时编译器在运行时,对一些代码要求同步,但是对被检测到不可能存在共

2022-05-25 14:12:44 65

原创 JVM——与线程有关的基础概念深入解析

线程的实现内核线程实现内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口——轻量级进程(LightWeight Process,LWP)由于是基于内核线程实现的,所以各种线程操作,如创建、析构及同步,都需要进行系统调用。而系统调用的代价相对较高,

2022-05-25 14:10:53 94

原创 JVM——关于JAVA内存模型的重点梳理与理解

深入理解JAVA虚拟机中对于JMM的讲解中的重点

2022-05-25 14:05:36 86

原创 JVM——JAVA服务器应用故障处理与调优案例简要总结

深入理解JAVA虚拟机中一些服务端调优与故障处理案例的简要总结与梳理

2022-05-25 10:55:34 564

原创 JVM——性能调优的突破方向与解决策略

深入理解JAVA虚拟机中有关性能调优的方法总结

2022-05-24 23:58:19 463

原创 JVM——从源码编译到类执行与内存管理全流程梳理

关于JVM全流程作用的详解

2022-05-23 23:42:01 328

原创 JVM——故障处理工具最全简单介绍

JVM调优所会用到的故障处理工具大全

2022-05-23 23:09:07 123

原创 JVM——深入理解字节码执行引擎概念模型与作用

有关字节码执行引擎的深入理解与阐释

2022-05-23 22:53:29 186

原创 JVM——类加载机制全流程梳理与重点剖析

关于类加载的一些重点

2022-05-23 10:33:02 264 2

原创 JVM——深入理解Class类文件结构与作用

深入理解JAVA虚拟机中关于类文件的一些重点以及个人理解

2022-05-22 23:48:02 239

原创 JVM——Gabage Collection_精华总结_一篇文章看完GC垃圾收集机制

JAVA垃圾收集中的一些本人认为的重点

2022-05-21 22:47:46 472

空空如也

空空如也

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

TA关注的人

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