- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 一、Redis 基础
1.redis的数据结构redis的基本数据结构1.1 动态字符串struct sdshdr { // 记录 buf 数组中已使用字节的数量 // 等于 SDS 所保存字符串的长度 int len; // 记录 buf 数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];};与C的区别:常数复杂度获取字符串长度杜绝缓冲区溢出,结尾为空字符减少修改字符串时带来的内存重分配次数,通过空间分配
2021-04-14 20:22:59
164
原创 Mysql的缓存log学习笔记
1.mysql的逻辑分层Mysql分为Server层和插件式存储引擎层。不同的存储引擎共享一个Server层:连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。查询缓存:mysql 8 已经删去,由于每次更新表都会刷新对应整个表的缓存,需要频繁更新消耗资源。分析器:对SQL进行分析的。优化器:主要查找最优的执行方法,例如是否走索引,走哪个索引等等。执行器:将从存储引擎获取的数据进行处理,组成结果返回给客户端。存储引擎层:提供读写数据的API(一切的缓存为了减少IO,从而提交执行
2021-04-14 20:11:45
248
原创 InnoDB存储引擎-锁(5)
1.总述锁基本:互斥锁和共享锁MVCC: 称之为多版本并发控制一致性非锁定读事务隔离级别:COMMITTED和REPEATABLE READ在事务隔离级别READ COMMITTED和REPEATABLE READ(InnoDB存储引擎的默认事务隔离级别)下,InnoDB存储引擎使用非锁定的一致性读。然而,对于快照数据的定义却不相同。在READ COMMITTED事务隔离级别下,对于快照数据,非一致性读总是读取被锁定行的最新一份快照数据,就是会读取其他事务提交之后的数据。而在REPEATABL
2021-04-14 20:10:52
115
原创 InnoDB存储引擎-索引与算法(4)
1.索引的结构插入操作:并不是总是在中间分裂的,这个得看配置的参数。删除操作:聚集索引InnoDB存储引擎表是索引组织表,即表中数据按照主键顺序存放。聚集索引的存储并不是物理上连续的,而是逻辑上连续的。这其中有两点:一是前面说过的页通过双向链表链接,页按照主键的顺序排序;另一点是每个页中的记录也是通过双向链表进行维护的,物理存储上可以同样不按照主键存储。辅助索引也称非聚集索引, 叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签(boo
2021-04-14 20:10:05
158
原创 InnoDB存储引擎-表(3)
1.表空间在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:❑首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键。❑如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。表的空间结构:表空间又由段(segment)、区(extent)、页(page)组成。段InnoDB存储引擎表是索引组织的(index organized),因此数
2021-04-14 20:09:11
145
原创 InnoDB存储引擎-文件(2)
**参数文件:**告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。**日志文件:**用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。❑错误日志(error log)❑二进制日志(binlog)❑慢查询日志(slow query log)❑查询日志(log)**socket文件:**当用UNIX域套接字方式进行连接时需要的文件。**pid
2021-04-14 20:08:34
76
原创 InnoDB存储引擎-概述(1)
1.概述innodb主要有两种线程 Master Thread(刷新内存到磁盘)和 IO Thread (处理磁盘请求的IO)。innodb是利用磁盘存储的,但是磁盘操作满,提供了大量的缓存,来减少这个速度的鸿沟。1.1 innodb的内存:缓冲池:1.2 LRU List、Free List和Flush List:LRU List:缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来进行管理的。用来存储被查询出来的page的。**实现:**但是和其不同的,会通
2021-04-14 20:07:29
356
原创 初识Kafka
1.为什么要用消息队列1)解耦:将系统按照功能模块解耦。2)异步:事件比较重,异步处理事件。3)削峰:将大量消息排队,然后异步一个一个处理,防止高并发导致系统无法承受。2.kafka基本结构producer: 生产者,客户端主要将消息发送kafka cluster:broker:每个broker,对应是一台服务器。topic:就是一种消息类型。Partition**:**每个topic可多个分区Partition,提高负载能力。Replication**:**每个分区有多个副本,其实
2021-01-26 20:35:42
157
原创 redis的哨兵
1.概述Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案。2.为什么要用哨兵为了实现redis集群高可用,当master redis宕机可以实现自动切换选举,过程全透明。而当没有时候,则要利用手动实现。3.哨兵和redis关系图哨兵会定时ping各个服务器,进行心跳检查。4.哨兵机制1.先判断主节点是否宕机先进行主观判断,再进行客观判断。首先如果哨兵发现ping服务器,没有有效的回复,该哨兵就会主观认为,该服务已经下线了。并且如果该节点是master,该哨兵
2021-01-22 16:09:24
120
原创 死锁浅析
1.锁的分类首先记住一个基本点,锁是对表的索引的节点进行锁,而不是对某行锁,当走不了索引时候可能就会锁表了。1.1锁模式这里我主要分析锁的模式。记录锁记录锁是最简单的行锁, 仅仅锁住一行 。即使一个表没有索引,InnoDB也会隐式的创建一个索引,并使用这个索引实施记录锁。(record lock)间隙锁(Gap Locks)间隙锁是一种加在两个索引之间的锁,或者加在第一个索引之前,或最后一个索引之后的间隙。主要对一个区间而加锁。关键字(gap before rec)Next-Key Loc
2021-01-22 16:05:05
342
4
原创 一、基础架构
架构是什么?软件架构指软件系统的顶层结构,主要是由系统是一群关联个体组成,个体可以是模块或者子系统,他们按照某种特定的规则来运作和协作。系统架构的目的架构设计的主要目的是为了解决软件系统复杂度带来的问题,要有的放矢,不是胡编乱造。(这个结论虽然很简洁,但却是架构设计过程中需要时刻铭记在心的一条准则)复杂度来源复杂度来源主要包括:高性能、高可用、可扩展、低成本、安全、规模。3.1 高性能复杂度解决集群复杂度:增加机器任务分配 和 将任务分解。任务分解:将系统分拆为多个子系统,单独的.
2020-12-24 22:19:03
2970
1
原创 垃圾回收
如何辨别一个对象是存是亡?用来辨别的计算方法有两种:引用计数法与可达性分析。1.1 引用计数法**实现方式:**每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为 0,则说明该对象已经死亡,便可以被回收了。**缺点:**1.需要额外的空间来存储计数器,以及繁琐的更新操作2.引用计数法还有一个重大的漏洞,那便是无法处理循环引用对象。1.2 可达性分析**实现方式:**这个是主流的垃圾回收器。这个算法的实质在于将一系列 GC Roots 作为初始的存活对象合集.
2020-12-24 22:17:15
163
原创 Java虚拟机的监控及诊断工具(命令行篇)
1.基本命令的应用1.1 jps(源操作文档)在默认情况下,jps的输出信息包括 Java 进程的进程 ID 以及主类名。我们还可以通过追加参数,来打印额外的信息。如果某 Java 进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该 Java 进程。常用的参数:-l :将打印模块名以及包名;-v :将打印传递给 Java 虚拟机的参数(如-XX:+UnlockExperimentalVMOptions
2020-12-24 22:16:03
321
原创 浅谈Spring AOP的原理和应用
浅谈Spring AOP的原理和应用1.AOP简介Aop(Aspect Oriented Programming)大家应该都知道这是面向切面编程思想,主要能够为我们在不影响原来的功能的前提,为软件横向拓展功能。简单来说,把对象中一些公用的行为抽取出来,减少代码冗余性,还可以将业务代码和系统功能代码分离开。以下,我对Spring AOP进行一系列探讨,(注意:Aop是一种思想,以下主要对Spring Aop技术的探讨的)2.Aop使用的场景1)权限验证2)缓存3)异常统一处理4)日志系统5)信
2020-07-11 16:30:04
252
原创 explain执行优化sql
首先用explain执行sql查看 type,如果是all,则表示该查询是全表扫描。如果是全表扫描,再查看是否有索引,查看possible_keys,这个是可能利ds用的索引。然后没有,则表示,需要去建立索引。可以添加索引,根据查询字段来添加索引,很多查询都基本可以利用到公司的id来查询的,所以这个索引很重要,这样数据就可以极大地过滤。其他就根据需要的过滤。如果是possi...
2020-04-04 17:11:59
203
原创 Sql优化
首先用explain执行sql查看 type,如果是all,则表示该查询是全表扫描。2.如果是全表扫描,再查看是否有索引,查看possible_keys,这个是可能利用的索引。然后没有,则表示,需要去建立索引。可以添加索引,根据查询字段来添加索引,很多查询都基本可以利用到公司的id来查询的,所以这个索引很重要,这样数据就可以极大地过滤。其他就根据需要的过滤。3.如果是possible_...
2019-09-28 00:39:48
317
原创 树
一、树的分类二、二叉树二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。三、完全二叉树满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。所有叶子结点必须在同一层上。完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~...
2019-09-28 00:35:25
91
原创 SpringMVC
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。<context-param> <param-name>contextConfigLocation</param-name...
2019-09-28 00:33:58
95
原创 Spring Cloud
一、springcloud的组件和流程Eureka/juˈriːkə/(服务注册和发现模块):各个服务启动时,Eureka Client 都会将服务注册到 Eureka Server,并且 Eureka Client 还可以反过来从 Eureka Server 拉取注册表,从而知道其他服务在哪里。Ribbon(客户端负载均衡工具):服务间发起请求的时候,基于 Ribbon 做负载均衡,从一个服...
2019-09-28 00:31:55
110
原创 实验二
一、用况图:修改个人信息简述:顾客点击修改个人信息按钮修改顾客支付密码,收货人的地址,手机号,收货人姓名等信息。参与者:顾客包含:无扩展:误继承:无前置条件:顾客处于正常登录状态。细节:1)选择修改个人信息功能2)选择需要修改的信息选项(收货人地址,收货人电话,收货人姓名等)进行修改3)点击保存按钮后置条件:无例外:1) 顾客在修改个人信息途中突然放弃修改意愿,退出修改个人...
2019-04-18 21:22:24
1005
原创 实验一
一、 问题陈述在线购物系统:在线购物是通过互动的互联网系统来连结用户与销售者以进行销售。销售者利用互联网系统提供产品和服务目录供用户浏览,用户则利用家中的电脑通过网络进行选购。该在线购物系统的参与人员有游客、注册客户、商品管理员、客服,系统内部数据库有商品数据库、订单数据库、注册用户数据库。游客游客浏览页面,但当需要购买时,需注册一个账号或者登陆已有账号。注册时,需要绑定一张没有绑定...
2019-04-18 21:21:51
1833
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人