lua
Redis在2.6版引入了對Lua的支持
- 使用Lua可以非常明顯的提升Redis的效率棍辕。
- 只要腳本所對應(yīng)的函數(shù)曾經(jīng)在 Lua 里面定義過锯岖, 那么即使用戶不知道腳本的內(nèi)容本身帐萎, 也可以直接通過腳本的 SHA1 校驗和來調(diào)用腳本所對應(yīng)的函數(shù), 從而達(dá)到執(zhí)行腳本的目的 —— 這就是 EVALSHA 命令的實現(xiàn)原理
- 當(dāng) Lua 腳本里本身有調(diào)用 Redis 命令時(執(zhí)行
redis.call
或者redis.pcall
), Redis 和 Lua 腳本之間的數(shù)據(jù)交互會更復(fù)雜一些脖母。
redis pipeline
pipeline引入,降低了多次命令-應(yīng)答之間的網(wǎng)絡(luò)交換次數(shù)闲孤,并不能縮小redis對每個命令的處理時間
什么時候使用pipeline谆级,什么時候使用lua
- 當(dāng)多個redis命令之間沒有依賴、順序關(guān)系(例如第二條命令依賴第一條命令的結(jié)果)時崭放,建議使用pipline哨苛;
- 如果命令之間有依賴或順序關(guān)系時,pipline就無法使用币砂,此時可以考慮才用lua腳本的方式來使用建峭。
redis執(zhí)行l(wèi)ua腳本好處
- 減少網(wǎng)絡(luò)開銷,本來多次網(wǎng)絡(luò)請求的操作决摧,可以用一個請求完成亿蒸,原來多次請求的邏輯均放在redis服務(wù)器上完成。使用lua掌桩,減少了網(wǎng)絡(luò)往返時延边锁;
- 原子操作:redis會將整個腳本作為一個整體執(zhí)行,不會被其他命令插入波岛。
- 復(fù)用:客戶端發(fā)送的腳本會永久存儲在redis中茅坛,意味著其他客戶端可以復(fù)用這一腳本而無需使用代碼完成同樣邏輯。