# 對象
在前面的數個章節里, 我們陸續介紹了 Redis 用到的所有主要數據結構, 比如簡單動態字符串(SDS)、雙端鏈表、字典、壓縮列表、整數集合, 等等。
Redis 并沒有直接使用這些數據結構來實現鍵值對數據庫, 而是基于這些數據結構創建了一個對象系統, 這個系統包含字符串對象、列表對象、哈希對象、集合對象和有序集合對象這五種類型的對象, 每種對象都用到了至少一種我們前面所介紹的數據結構。
通過這五種不同類型的對象, Redis 可以在執行命令之前, 根據對象的類型來判斷一個對象是否可以執行給定的命令。 使用對象的另一個好處是, 我們可以針對不同的使用場景, 為對象設置多種不同的數據結構實現, 從而優化對象在不同場景下的使用效率。
除此之外, Redis 的對象系統還實現了基于引用計數技術的內存回收機制: 當程序不再使用某個對象的時候, 這個對象所占用的內存就會被自動釋放; 另外, Redis 還通過引用計數技術實現了對象共享機制, 這一機制可以在適當的條件下, 通過讓多個數據庫鍵共享同一個對象來節約內存。
最后, Redis 的對象帶有訪問時間記錄信息, 該信息可以用于計算數據庫鍵的空轉時長, 在服務器啟用了?`maxmemory`?功能的情況下, 空轉時長較大的那些鍵可能會優先被服務器刪除。
本章接下來將逐一介紹以上提到的 Redis 對象系統的各個特性。
- 介紹
- 前言
- 致謝
- 簡介
- 第一部分:數據結構與對象
- 簡單動態字符串
- SDS 的定義
- SDS 與 C 字符串的區別
- SDS API
- 重點回顧
- 參考資料
- 鏈表
- 鏈表和鏈表節點的實現
- 鏈表和鏈表節點的 API
- 重點回顧
- 字典
- 字典的實現
- 哈希算法
- 解決鍵沖突
- rehash
- 漸進式 rehash
- 字典 API
- 重點回顧
- 跳躍表
- 跳躍表的實現
- 跳躍表 API
- 重點回顧
- 整數集合
- 整數集合的實現
- 升級
- 升級的好處
- 降級
- 整數集合 API
- 重點回顧
- 壓縮列表
- 壓縮列表的構成
- 壓縮列表節點的構成
- 連鎖更新
- 壓縮列表 API
- 重點回顧
- 對象
- 對象的類型與編碼
- 字符串對象
- 列表對象
- 哈希對象
- 集合對象
- 有序集合對象
- 類型檢查與命令多態
- 內存回收
- 對象共享
- 對象的空轉時長
- 重點回顧
- 第二部分:單機數據庫的實現
- 數據庫
- 數據庫鍵空間
- 重點回顧
- RDB 持久化
- RDB 文件結構
- 重點回顧
- AOF 持久化
- AOF 持久化的實現
- 重點回顧
- 事件
- 文件事件
- 重點回顧
- 參考資料
- 客戶端
- 客戶端屬性
- 重點回顧
- 服務器
- 命令請求的執行過程
- 重點回顧
- 第三部分:多機數據庫的實現
- 復制
- 舊版復制功能的實現
- 重點回顧
- Sentinel
- 啟動并初始化 Sentinel
- 重點回顧
- 參考資料
- 集群
- 節點
- 重點回顧
- 第四部分:獨立功能的實現
- 發布與訂閱
- 頻道的訂閱與退訂
- 重點回顧
- 參考資料
- 事務
- 事務的實現
- 重點回顧
- Lua 腳本
- 創建并修改 Lua 環境
- 重點回顧
- 排序
- SORT <key> 命令的實現
- 重點回顧
- 二進制位數組
- GETBIT 命令的實現
- 重點回顧
- 慢查詢日志
- 慢查詢記錄的保存
- 慢查詢日志的閱覽和刪除
- 添加新日志
- 重點回顧
- 監視器
- 成為監視器
- 向監視器發送命令信息
- 重點回顧
- 源碼、相關資源和勘誤