2014-06-10 18 views
3

在停止並重新啓動Redis服務器時,通過Redis發送內容會引發以下錯誤:「StackExchange.Redis.RedisServerException:NOSCRIPT沒有匹配的腳本,請使用EVAL。」StackExchange.Redis - 禁用EVALSHA?

我的理解是,當服務器不記得具有SHA1摘要的腳本時,會發生此錯誤。我猜測服務器在重新啓動時刪除緩存的腳本 - 應如何處理?

回答

2

庫在內部檢測到此錯誤並刷新已知良好腳本的本地緩存,以便庫自我修復,下次腳本被調用時,它將自動發出SCRIPT LOAD。如果您使用的是*Async API,則不會自動重新發布此信息,因爲無法瞭解主叫方想要發生的情況以及是否有相關的命令已經處於運行狀態。但是,使用非*Async API時,它知道這不是問題,所以它會自動爲您重新發出命令而不會顯示錯誤。

重新啓動redis服務器是一個相當罕見的事件,但是:我懷疑它可以合理地更改爲在斷開連接時刷新腳本緩存。


更新:我現在track changes to the run-id,唯一標識一個服務器運行(從而重啓)。如果此更改,腳本緩存刷新。

+0

是的,我認爲你應該有能力在服務器重新啓動時清除客戶端上的緩存。我將在GitHub上爲此打開一個問題,您能夠很快看到這個問題嗎? –

+0

@Abhishek是的,我認爲是。請注意,我們不一定知道服務器已重新啓動(儘管我可能能夠檢查上級服務器上的run-id) - 我們可以保證檢測的所有內容都是斷開連接 –

+0

@AbhishekNanda請參閱編輯 –