Redis基础篇-01键值数据库基础架构
Redis基础篇-01键值数据库基础架构
01 | 导读
1、更好的学习方式
1)先建立起“系统观”,也就是说,如果我们想要深入理解和优化 Redis,就必须要对它的总体架构和关键模块有一个全局的认知,然后再深入到具体的技术点
2、专栏讲解方式
1)通过剖析一个最简单 SimpleKV 键值数据库,来迅速抓住学习和调优 Redis 的关键
02 | 构造 SimpleKV 键值数据库
1、SimpleKV 的基本内部架构
1)大体来说,一个键值数据库包括了访问框架、索引模块、操作模块和存储模块四部分
2、可以对数据做什么操作
1)SimpleKV 支持基本操作增删改查,即 PUT、GET 和 DELETE
2)键值对保存在内存还是外存,以及它们的优劣
3、可以存哪些数据
1)对于键值数据库而言,基本的数据模型是 key-value 模型
2)“不同键值数据库支持的 key 类型一般差异不大,而 value 类型则有较大差别。例如,Memcached 支持的 value 类型仅为 String 类型,而 Redis 支持的 value 类型包括了 String、哈希表、列表、集合等
3)不同 value 类型的实现,不仅可以支撑不同业务的数据需求
4、采用什么访问模式
1)访问模式通常有两种:一种是通过函数库调用的方式供外部应用使用,另一种是通过网络框架以 Socket 通信的形式对外提供键值对操作
2)实际的键值数据库也基本采用上述两种方式,例如,RocksDB 以动态链接库的形式使用,而 Memcached 和 Redis 则是通过网络框架访问
5、如何定位键值对的位置
1)当 SimpleKV 解析了客户端发来的请求,知道了要进行的键值对操作,此时,SimpleKV 需要查找所要操作的键值对是否存在,这依赖于键值数据库的索引模块
2)索引的作用是让键值数据库根据 key 找到相应 value 的存储位置,进而执行操作
3)不同键值数据库采用的索引并不相同,例如,Memcached 和 Redis 采用哈希表作为 key-value 索引,而 RocksDB 则采用跳表作为内存中 key-value 的索引
4)对于 Redis 而言,通过索引找到 key对应的value后,仍然需要从 value 的复杂结构(例如集合和列表)中进一步找到我们实际需要的数据,这个操作的效率本身就依赖于它们的实现结构
6、不同操作的具体逻辑是怎样的
1)GET/SCAN:根据 value 的存储位置返回 value 值
2)PUT:新建或修改,为新建键值对分配内存空间
3)“DELETE:删除,释放相应的内存空间
7、如何实现重启后快速提供服务
1)SimpleKV 只需要考虑何时将内存中的键值数据保存到文件中,有两种方式。
2)一种方式是,对于每一个键值对,SimpleKV 都对其进行落盘保存, 该方式更加可靠,但是,因为每次都要写盘,SimpleKV 的性能会受到很大影响,
3)另一种方式是,SimpleKV 只是周期性地把内存中的键值数据保存到文件中,这样可以避免频繁写盘操作的性能影响。但是有数据丢失的风险。
03 | 小结
1、构造简单键值数据库 SimpleKV
1)前面两步我们是从应用的角度进行设计的,也就是应用视角
2)后面四步其实就是 SimpleKV 完整的内部构造
2、从 SimpleKV 到 Redis 的演进
1)从 SimpleKV 到 Redis 的演进 图
2)Redis 主要通过网络框架进行访问,而不再是动态库了
3)Redis 数据模型中的 value 类型很丰富,因此也带来了更多的操作接口
4)Redis 的持久化模块能支持两种方式:日志(AOF)和快照(RDB),它们各有优劣
5)SimpleKV 是个简单的单机键值数据库,但是,Redis 支持高可靠集群和高可扩展集群,因此,Redis 中包含了相应的集群功能支撑模块
04 | 思维导图
1、键值数据库基础架构
参考文献:
[1] 蒋德钧. Redis核心技术与实战[M]. 极客时间, 2020.
[2] 图片取自《Redis核心技术与实战》专栏
本文地址:https://blog.csdn.net/z_z_z_666666/article/details/108875447