* Redis 服務器在啟動時, 會對內嵌的 Lua 環境執行一系列修改操作, 從而確保內嵌的 Lua 環境可以滿足 Redis 在功能性、安全性等方面的需要。
* Redis 服務器專門使用一個偽客戶端來執行 Lua 腳本中包含的 Redis 命令。
* Redis 使用腳本字典來保存所有被?EVAL?命令執行過, 或者被?SCRIPT_LOAD?命令載入過的 Lua 腳本, 這些腳本可以用于實現SCRIPT_EXISTS?命令, 以及實現腳本復制功能。
* EVAL?命令為客戶端輸入的腳本在 Lua 環境中定義一個函數, 并通過調用這個函數來執行腳本。
* EVALSHA?命令通過直接調用 Lua 環境中已定義的函數來執行腳本。
* SCRIPT_FLUSH?命令會清空服務器?`lua_scripts`?字典中保存的腳本, 并重置 Lua 環境。
* SCRIPT_EXISTS?命令接受一個或多個 SHA1 校驗和為參數, 并通過檢查?`lua_scripts`?字典來確認校驗和對應的腳本是否存在。
* SCRIPT_LOAD?命令接受一個 Lua 腳本為參數, 為該腳本在 Lua 環境中創建函數, 并將腳本保存到?`lua_scripts`?字典中。
* 服務器在執行腳本之前, 會為 Lua 環境設置一個超時處理鉤子, 當腳本出現超時運行情況時, 客戶端可以通過向服務器發送SCRIPT_KILL?命令來讓鉤子停止正在執行的腳本, 或者發送?SHUTDOWN nosave?命令來讓鉤子關閉整個服務器。
* 主服務器復制?EVAL?、?SCRIPT_FLUSH?、?SCRIPT_LOAD?三個命令的方法和復制普通 Redis 命令一樣 —— 只要將相同的命令傳播給從服務器就可以了。
* 主服務器在復制?EVALSHA?命令時, 必須確保所有從服務器都已經載入了?EVALSHA?命令指定的 SHA1 校驗和所對應的 Lua 腳本, 如果不能確保這一點的話, 主服務器會將?EVALSHA?命令轉換成等效的?EVAL?命令, 并通過傳播?EVAL?命令來獲得相同的腳本執行效果
- 介紹
- 前言
- 致謝
- 簡介
- 第一部分:數據結構與對象
- 簡單動態字符串
- SDS 的定義
- SDS 與 C 字符串的區別
- SDS API
- 重點回顧
- 參考資料
- 鏈表
- 鏈表和鏈表節點的實現
- 鏈表和鏈表節點的 API
- 重點回顧
- 字典
- 字典的實現
- 哈希算法
- 解決鍵沖突
- rehash
- 漸進式 rehash
- 字典 API
- 重點回顧
- 跳躍表
- 跳躍表的實現
- 跳躍表 API
- 重點回顧
- 整數集合
- 整數集合的實現
- 升級
- 升級的好處
- 降級
- 整數集合 API
- 重點回顧
- 壓縮列表
- 壓縮列表的構成
- 壓縮列表節點的構成
- 連鎖更新
- 壓縮列表 API
- 重點回顧
- 對象
- 對象的類型與編碼
- 字符串對象
- 列表對象
- 哈希對象
- 集合對象
- 有序集合對象
- 類型檢查與命令多態
- 內存回收
- 對象共享
- 對象的空轉時長
- 重點回顧
- 第二部分:單機數據庫的實現
- 數據庫
- 數據庫鍵空間
- 重點回顧
- RDB 持久化
- RDB 文件結構
- 重點回顧
- AOF 持久化
- AOF 持久化的實現
- 重點回顧
- 事件
- 文件事件
- 重點回顧
- 參考資料
- 客戶端
- 客戶端屬性
- 重點回顧
- 服務器
- 命令請求的執行過程
- 重點回顧
- 第三部分:多機數據庫的實現
- 復制
- 舊版復制功能的實現
- 重點回顧
- Sentinel
- 啟動并初始化 Sentinel
- 重點回顧
- 參考資料
- 集群
- 節點
- 重點回顧
- 第四部分:獨立功能的實現
- 發布與訂閱
- 頻道的訂閱與退訂
- 重點回顧
- 參考資料
- 事務
- 事務的實現
- 重點回顧
- Lua 腳本
- 創建并修改 Lua 環境
- 重點回顧
- 排序
- SORT <key> 命令的實現
- 重點回顧
- 二進制位數組
- GETBIT 命令的實現
- 重點回顧
- 慢查詢日志
- 慢查詢記錄的保存
- 慢查詢日志的閱覽和刪除
- 添加新日志
- 重點回顧
- 監視器
- 成為監視器
- 向監視器發送命令信息
- 重點回顧
- 源碼、相關資源和勘誤