Lua 是獨立的,它不依附 Redis 也活得好好的,也可以開發有的沒的應用。
但為何Redis對它這麼好?
因為它很輕。
原子性。一即全,全即一。不會被打斷,不會有人打擾,資源不會被搶佔,沒有競態問題,且 redis 不會 rollback。
Redis 是用 C 語言寫的,但有內嵌 Lua 解釋器(嵌入式引擎)。為何是 Lua,因為輕量,記憶體佔用少,啟動速度很快,且支援確定性(相同狀態下結果一定一致)對 Redis 主從複製的特性很重要。
Redis底層開放了API專門給它用,特殊待遇。可以再 Redis Server 直接執行 Lua 程式碼,這些程式碼會在 Redis 的 Lua 解釋器中運行。
但他不負眾望。
沒人想要跑來跑去,一次能做好,為何分兩次?所以我發一次腳本,Redis Server 執行整個 Lua 腳本後,一次返回結果。
像SQL一樣,能一次算好就一次吧。
讓 Redis 的實例做一點 CPU 運算也沒差啊。減少網路傳輸的開銷可以讓系統更穩定一點。