4

Redis サーバーを停止して再起動すると、Redis 経由で何かを送信すると、次のエラーがスローされます: "StackExchange.Redis.RedisServerException: NOSCRIPT No matching script.Please use EVAL."

私の理解では、このエラーは、サーバーが SHA1 ダイジェストを含むスクリプトを記憶していない場合に発生します。サーバーが再起動時にキャッシュされたスクリプトを削除すると推測しています - これはどのように処理する必要がありますか?

4

1 に答える 1

3

ライブラリはこのエラーを内部的に検出し、既知の正常なスクリプトのローカル キャッシュをフラッシュします。そのため、ライブラリはこのエラーから自己回復し、次にスクリプトが呼び出されたときにSCRIPT LOAD自動的にエラーを発行します。APIを使用している場合、*Asyncこれは自動的に再発行されません。これは、呼び出し元が何をしたいのか、関連するコマンドが既に実行中であるかどうかを理解することが不可能になるためです。ただし、非*AsyncAPI を使用している場合は、これが問題ではないことを認識しているため、エラーを表示せずにコマンドを自動的に再発行します。

redis サーバーの再起動はかなりまれなイベントですが、切断時にスクリプト キャッシュをフラッシュするように合理的に変更できるのではないかと思います。


更新:サーバーの実行 (再起動) を一意に識別するrun-id への変更を追跡するようになりました。これが変更されると、スクリプト キャッシュがフラッシュされます。

于 2014-06-11T07:07:22.053 に答える