Redis 重點(diǎn)回顧

2018-08-02 14:57 更新
  • Redis 服務(wù)器在啟動(dòng)時(shí), 會(huì)對內(nèi)嵌的 Lua 環(huán)境執(zhí)行一系列修改操作, 從而確保內(nèi)嵌的 Lua 環(huán)境可以滿足 Redis 在功能性、安全性等方面的需要。
  • Redis 服務(wù)器專門使用一個(gè)偽客戶端來執(zhí)行 Lua 腳本中包含的 Redis 命令。
  • Redis 使用腳本字典來保存所有被 EVAL 命令執(zhí)行過, 或者被 SCRIPT_LOAD 命令載入過的 Lua 腳本, 這些腳本可以用于實(shí)現(xiàn)SCRIPT_EXISTS 命令, 以及實(shí)現(xiàn)腳本復(fù)制功能。
  • EVAL 命令為客戶端輸入的腳本在 Lua 環(huán)境中定義一個(gè)函數(shù), 并通過調(diào)用這個(gè)函數(shù)來執(zhí)行腳本。
  • EVALSHA 命令通過直接調(diào)用 Lua 環(huán)境中已定義的函數(shù)來執(zhí)行腳本。
  • SCRIPT_FLUSH 命令會(huì)清空服務(wù)器 lua_scripts 字典中保存的腳本, 并重置 Lua 環(huán)境。
  • SCRIPT_EXISTS 命令接受一個(gè)或多個(gè) SHA1 校驗(yàn)和為參數(shù), 并通過檢查 lua_scripts 字典來確認(rèn)校驗(yàn)和對應(yīng)的腳本是否存在。
  • SCRIPT_LOAD 命令接受一個(gè) Lua 腳本為參數(shù), 為該腳本在 Lua 環(huán)境中創(chuàng)建函數(shù), 并將腳本保存到 lua_scripts 字典中。
  • 服務(wù)器在執(zhí)行腳本之前, 會(huì)為 Lua 環(huán)境設(shè)置一個(gè)超時(shí)處理鉤子, 當(dāng)腳本出現(xiàn)超時(shí)運(yùn)行情況時(shí), 客戶端可以通過向服務(wù)器發(fā)送SCRIPT_KILL 命令來讓鉤子停止正在執(zhí)行的腳本, 或者發(fā)送 SHUTDOWN nosave 命令來讓鉤子關(guān)閉整個(gè)服務(wù)器。
  • 主服務(wù)器復(fù)制 EVAL 、 SCRIPT_FLUSH 、 SCRIPT_LOAD 三個(gè)命令的方法和復(fù)制普通 Redis 命令一樣 —— 只要將相同的命令傳播給從服務(wù)器就可以了。
  • 主服務(wù)器在復(fù)制 EVALSHA 命令時(shí), 必須確保所有從服務(wù)器都已經(jīng)載入了 EVALSHA 命令指定的 SHA1 校驗(yàn)和所對應(yīng)的 Lua 腳本, 如果不能確保這一點(diǎn)的話, 主服務(wù)器會(huì)將 EVALSHA 命令轉(zhuǎn)換成等效的 EVAL 命令, 并通過傳播 EVAL 命令來獲得相同的腳本執(zhí)行效果
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)