2
運行的Lua腳本即時通訊有問題,這裏是我在做什麼:爲什麼在redis重新啓動後,我無法在redis中運行lua腳本?
- 我加載腳本,以使用Redis的裝載腳本,讓我的腳本的SHA。
- 我用SHA測試我的腳本,它沒問題。
- 我做了一個SAVE(BGSAVE),SHUTDOWN並再次運行redis服務器,但我無法用SHA執行我的腳本,這是我之前可以執行的。
這是爲什麼?
運行的Lua腳本即時通訊有問題,這裏是我在做什麼:爲什麼在redis重新啓動後,我無法在redis中運行lua腳本?
這是爲什麼?
服務器端Lua腳本不由Redis保存或存儲。它們與您可以在RDBMS中找到的存儲過程不相似。
客戶端應至少爲腳本的第一次執行提供腳本文本(即對第一次執行使用EVAL,對於下一次調用使用EVALSHA)。或者,您也可以使用SCRIPT LOAD和SCRIPT EXISTS,根據情況可能會更方便。
這對於應用程序來說處理起來要複雜一點,但有一些好處:它使得Redis服務器在Lua腳本編寫時無狀態。應用程序的代碼(包括Lua腳本)在應用程序端進行管理。在加載新版本的應用程序之前(即使Lua腳本已更改),您不需要在Redis服務器上應用某些內容。
此屬性在分佈式基礎結構的上下文中非常有用,可支持即時應用程序負載或客戶端分片或Redis集羣。
謝謝你的回答,這是非常有用的,對不起我的英文不好:)) – MultiHeadUnicorn