请注意,本文编写于 677 天前,最后修改于 677 天前,其中某些信息可能已经过时。
本篇重点:通过SimpleKV了解KV数据库的基本架构
Redis: 键值DB
从SimpleKV入手学习Redis
SimpleKV | Redis | |
---|---|---|
数据模型 | key:value组成的KV键值对key-type: Stringvalue-type: 基本数据类型(int、double等) | KV键值对value-type: String、哈希表、列表、集合等 |
操作接口 | PUT/GET/SCAN/DELETE | .. |
KV存储位置 | 内存 | 内存 |
基本组件 | 访问框架、索引模块、操作模块、存储模块 | .. |
访问模式 | 函数库调用(dll)、网络框架(Socket)(RocksDB用函数库调用,Memcached、Redis用网络框架) | 网络框架——“单线程、高性能” |
索引模块 | 哈希表、B+树、字典等(Memcached、Redis用哈希表,RocksDB用跳表) | 哈希表 |
持久化功能 | 文件形式存储内存中的KV | AOF、RDB |
Q-A:
KV保存在内/外存 的区别?
内存 :优点——读写快,缺点——掉电数据丢失
外存 :优点——避免数据丢失,缺点:慢,速度受限于磁盘如何根据不同场景选择KV的存储位置?
缓存 场景:要求快速访问但允许数据偶有丢失——内存
Memcached/Redis都是内存键值DB
两种访问模式——函数库调用/网络框架 中,网络框架需要考虑的问题?
a. 网络连接的处理(连接/断开/重连)
b. 网络请求的解析(接口)
c. 数据存取的处理(单/多线程,多进程)——IO模型设计
索引模块:Redis采用哈希表作为索引的原因?
内存的高性能随机访问特性 可以很好匹配哈希表O(1)的操作复杂度
操作的逻辑步骤
GET/SCAN: 根据Key返回value值
PUT/DELETE: a. 新写入/删除KV
b. 分配/释放内存
来源# 01 键值数据库的基本架构