摘要: 数据类型与底层原理 数据结构 哈希表 redis使用链式哈希来解决哈希冲突,其Hash表实质上是一个二维数组,其中每一项就是一个指向哈希项(dictEntry)的指针 typedef struct dictht { dictEntry **table; //二维数组 unsigned long si 阅读全文
posted @ 2024-09-14 23:35 pinoky 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 主从库与切片集群机制 主从复制源码剖析 redis的主从复制主要包括全量复制RDB文件,增量复制,长连接同步,使用了基于状态机的设计思想,来实现不同状态和状态间的跳转 基于状态机实现的话,在开发程序时只需要考虑不同状态下具体要执行的操作,以及状态之间的跳转条件即可 四大阶段 初始化阶段:将实例A设置 阅读全文
posted @ 2024-09-14 23:35 pinoky 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 高可用架构 主备一致 基本原理 M-S架构:客户端的读写都直接访问A库,直到切换时把客户端读写切换给B库,A变成备库 备库设置为readonly状态:防止切换过程出现双写,可以用readonly状态判断节点的角色 基本原理:主库A和备库B之间维持一个长连接,主库内部有一个线程专门用于服务B的这个长连 阅读全文
posted @ 2024-09-14 23:34 pinoky 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 日志系统 redo log重做日志 redo log为InnoDB引擎特有的物理日志,记录了:“在某个数据页上做了什么修改” 的操作,循环写入,具备着占用空间小、顺序写磁盘的优点 write pos作为当前记录的位置,一边写一边顺时针移动;checkpoint作为当前要擦除的位置,一边擦出一边顺时针 阅读全文
posted @ 2024-09-14 23:32 pinoky 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 事务系统 事务介绍 事务:保证原子性、隔离性、一致性、持久性(ACID)的一个或多个数据库操作 只有当事务处于提交或中止的状态,一个事务的生命周期才算结束 开启一个事务,输入以下一条语句后,就可以开始写若干条该事务的语句 BEGIN; START TRANSACTION; 可加入修饰符 READ O 阅读全文
posted @ 2024-09-14 23:32 pinoky 阅读(2) 评论(0) 推荐(0) 编辑
摘要: MVCC与锁 锁基本原理 当事务想要改动记录时,会查看内存中有没有跟该记录相关联的锁结构 没有的话就生成一个is_waiting为false的锁结构与之关联,代表获取锁成功; 如果发现该记录已经有锁关联了,会生成一个is_waiting为true的锁结构,代表获取锁失败,进入等待状态; 如果加锁的事 阅读全文
posted @ 2024-09-14 23:31 pinoky 阅读(6) 评论(0) 推荐(0) 编辑
摘要: InnoDB索引与底层原理 索引介绍 索引:一颗B+树,除了叶子节点外,其余的节点都作为目录项,且都是有序排列的 在目录项page里面,一条记录对应着下层的一个page 一条记录至少有两个列:列1作为主键 记录该page最小的主键值;列2记录该page的页号 在叶子节点才真正地存放数据 聚簇索引:以 阅读全文
posted @ 2024-09-14 23:29 pinoky 阅读(4) 评论(0) 推荐(0) 编辑