redis设计与实现笔记(一)

字符串

Redis的字符串用的是自己构建的字符串,称作SDS(简单动态字符串),除了用于保存数据库中的字符串以外,SDS还被用作缓冲区。

定义

  • free代表是否分配空间
  • len代表长度
  • buf是char数组

获取Redis的SDS的长度为O(1)复杂度

长度

当SDS长度即将溢出的时候,会自动扩容。类似vector,SDS会进行空间额预分配,当SDSDE长度小于1MB的时候,预分配1倍的空间,大于1MB的时候,预分配会多分配1MB。

惰性空间释放

缩短SDS的时候,程序不会回收字节,而是仅做一下标记,增长free字段的长度。

二进制安全

SDS所有的API都会以处理二进制的方式来处理存放在buf数组里的数据,不会做限制。

和C的主要区别

字典

Redis中的字典是哈希表,

CMU15-445笔记(十六)

并发控制

基于时间戳的协议

时间戳

对于系统中的每个事务$T_i$,赋予它一个时间戳,记为$TS(T_i)$。如果$TS(T_i) < TS(T_j)$,说明$T_j$比较新。
可以使用

  • 系统时钟
  • 逻辑计数器
阅读更多

CMU-15-445笔记(十五) 基于锁的协议

本次笔记来自《数据库系统概念》第七版 第18章的第一节

并发控制

为了确保书屋的隔离性,DBMS采用的是并发控制来实现的,主要有两阶段封锁(two-phase locking)和快照隔离(snapshot isolation)

阅读更多