![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库学习
文章平均质量分 70
努力学习的狗
这个作者很懒,什么都没留下…
展开
-
MySQL的查询访问方式
Mysql查询方式原创 2022-08-13 13:00:47 · 451 阅读 · 0 评论 -
锁执行的过程
数据库锁详细分析原创 2022-08-07 17:22:42 · 377 阅读 · 0 评论 -
语句加锁分析
Select锁原创 2022-08-06 00:14:15 · 169 阅读 · 0 评论 -
Redis整型数组Intset升级源码解析
在看Redis设计于实现的时候看到了一句话: 由于引发升级的新元素长度总是比整数集合现有的所有元素的长度都大,因此这个新元素的值要么就大于所有现有元素,要么就小于所有现有元素。 我的推断是:当插入数字的时候,如果这个数字小于int16那么就会给这个值类型设置为int16,如果大于int 16小于 int32就会设置为int 32,所以才会出现上述情况。但是觉得还是看源码靠谱,所以看看源码吧。 //Reids升级的源码 static intset *intsetUpgradeAndAdd(intset *is原创 2022-02-27 13:26:52 · 206 阅读 · 1 评论 -
Redis底层数据结构---哈希表底层原理
哈希表 结构定义 typedef struct dictht{ //哈希表数组 dictEntry **table; //哈希表大小 unsigned long size; //哈希表大小掩码,用于计算索引值 unsigned long sizemask; //该哈希表已有节点的数量 unsigned long used ; }dictht table 属性是一个数组 ,数组中的每个元素都是一个指向dict.h/dictEntry结构的指针,原创 2022-02-26 21:53:15 · 769 阅读 · 0 评论 -
Redis集群----集群的执行命令底层原理
当客户端向节点发送与数据库键有关的命令时,接收命令的节点会计算出命令要处理数据库键属于哪个槽,并检查这个槽是否指派给了自己: 如果键所在的槽正好指派给了当前的节点,那么节点直接执行这个命令 如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个MOVED错误,指引客户端转向至正确的节点,并再次发送之前想要执行的命令。 假设现在有节点100和节点200,节点100负责前8192个槽,节点200负责后8192个槽 假设键msg 处在槽8192 也就是节点200的第一个槽里面,键name处在槽0号位原创 2022-02-25 21:52:12 · 642 阅读 · 0 评论 -
Redis集群----槽指派底层原理
Redis集群通过分片的方式来保存数据库的键值对:集群的整个数据库被分为16384个槽,数据库中的每个键都输入这16384个槽其中的一个,集群中的每个节点都可以处理0-16384个槽。 当数据库中的16384个槽都有节点在处理时,集群处于上线状态;如果有任何一个槽没有得到处理,那么集群处于下线状态。 //通过向节点发送CLUSTER ADDSLOTS 命令,可以将一个或者多个槽指派给节点负责 CLUSTER ADDSLOTS <slot><slot...> 记录节点的槽指派信原创 2022-02-24 20:09:02 · 331 阅读 · 0 评论 -
Redis主从复制----心态检测机制
心跳检测 当完成同步之后,主从服务器就会进入命令传播阶段,这时主服务器只要一直将自己执行的写命令发送给服务器,而从服务器只要一直接收并执行主服务器发来的写命令,就可以保证主从服务器的数据一致。 在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令。 REPLCONF ACK <replication_offset> REPLCONF ACK 命令对主从服务器有三个作用: 检查主从服务器的网络连接状态 辅助实现min-slaves选项 检测命令丢失 检测主从服务器的网络原创 2022-02-24 15:40:19 · 277 阅读 · 0 评论 -
Redis主从复制---部分重同步的底层原理
部分重同步的实现 部分重同步功能由以下三个部分构成: 主服务器的复制偏移量和从服务器的复制偏移量 主服务器的复制积压缓冲区 服务器的运行ID 复制偏移量 执行复制的主从服务器都会保存一个复制偏移量: 主服务器每次向服务器传播N个字节的数据的时候,就将自己的复制偏移量+N 从服务器每次接收到主服务器传过来的N个字节的数据时,就将自己的复制偏移量的值加上N 开始状态 假设传输了14个字节后的状态 通过对比主从服务器的复制偏移量可以判断主从服务器是否处于一致性状态,相同则处于,不同则不处于原创 2022-02-24 15:09:11 · 524 阅读 · 0 评论 -
Redis主从复制----底层原理
Redis主从复制 通过Slaceof选项,让一个服务器去复制另外一个服务器,将被复制的服务器为主服务器,而对主服务器进行复制的服务器则被称为从服务器。 SLAVEOF <IP><PORT> 进行复制中的主从服务器双方的数据将会保存相同的数据,称之为数据一致。 数据一致性的实现 SYNC命令(旧版本) 从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令完成。 从服务器向主服务器发送SYNC命令 收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一原创 2022-02-24 14:26:10 · 105 阅读 · 0 评论 -
Redis集群---搭建集群的底部原理
Redis集群 Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。 节点 一个Redis集群通常由多个节点组成(运行在集群模式下的Reids服务器) //连接各个节点的工作可以使用 CLUSTER MEET <IP><port> 向一个节点发送CLUSTER MEET命令,可以让node节点与ip和port所指定的节点进行握手(handshake),如果握手成功,那么node节点会将ip和port所原创 2022-02-23 21:59:41 · 256 阅读 · 0 评论 -
Redis持久化--AOF
AOF持久化(通过保存Redis服务器所执行的写命令来记录数据库状态) AOF介绍 AOF持久化保存数据库状态的方法则是将服务器执行的命令保存到AOF文件中,被写入AOF文件的所有命令都是以redis的命令请求协议保存的。 在服务器启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的状态。 AOF持久化实现 AOF持久化功能的实现可以分为命令追加(append),文件写入,文件同步(sync)三个步骤。 1.命令追加 在AOF持久化功能处于打开状态时,服务器在执行完一个写命令原创 2022-02-22 23:20:45 · 299 阅读 · 0 评论 -
Reids持久化---RDB
RDB持久化(通过保存数据库中的键值来记录数据库状态) RDB介绍 RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。 RDB文件的创建与载入 1.SAVE和BGSAVE用来生成RDB文件。 SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。 BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程继续处理命令请求。 在BGSAVE原创 2022-02-22 23:11:10 · 232 阅读 · 0 评论 -
2021-10-20
MySQL索引失效以及原因(一) 我们都知道Innodb的底层数据结构是B+tree 支持范围查找。所以当索引失效的时候就会进行全表扫码,那么那些情况会索引失效呢? 建表命令 use `test`; create table single_table( id int not null auto_increment, key1 varchar(100), key2 int, key3 varchar(100), key_part1 varchar(100), ke原创 2021-10-21 00:38:37 · 58 阅读 · 0 评论