本篇重點:通過SimpleKV瞭解KV數據庫的基本架構
Redis: 鍵值DB
從SimpleKV入手學習Redis
SimpleKV | Redis | |
---|---|---|
數據模型 | key:value組成的KV鍵值對 key-type: String value-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. 分配/釋放內存
圖片來源於極客時間專欄《Redis核心技術與實戰》