2

Redis のドキュメントでは、キー名をスクリプトのパラメーターとして指定し、スクリプトでハードコーディングするのではなく、スクリプトで読み取ることを提案しています。スクリプトを呼び出すときに名前がわかっている場合、これはうまく機能します。

私の場合、キー名は Redis オブジェクト (ハッシュ) に格納され、パラメーターに応じてハッシュ エントリの一部を取得し、これらのキーにアトミックにアクセスする必要があります。

準拠した方法で機能させる方法について考えている人はいますか?

4

2 に答える 2

1

私は同じ問題に直面しました。おっしゃったように、Redis EVAL コマンドのドキュメントには次のように記載されています。

スクリプトが使用するすべてのキーは、次のように KEYS 配列を使用して渡す必要があります。

eval "return redis.call('set',KEYS 1 ,'bar')" 1 foo OK

適切な方法でキーを渡す理由は、EVAL の前にすべての Redis コマンドを実行前に分析して、コマンドが操作するキーを確立できるためです。

しかし、同じドキュメントの後半に次のように書かれています。

これが EVAL に当てはまるためには、キーも明示的でなければなりません。これは多くの点で便利ですが、特に Redis クラスターが適切なクラスター ノードにリクエストを確実に転送できるようにするために役立ちます (Redis クラスターは進行中の作業ですが、スクリプト機能はそれをうまく処理するために設計されました)。 . ただし、Redis クラスターと互換性のないスクリプトを作成することを犠牲にして、Redis の単一インスタンス構成を悪用する機会をユーザーに提供するために、このルールは強制されません。


要約すると、 Redis クラスターを使用している場合は、適切な方法でキーを渡すことが重要です。そのため、Redis クラスター化メカニズムは、操作対象のデータを認識し、そのおかげで、データがどこにあるかを認識します。

Redis Cluster を使用したくない場合、または他の方法でクラスタリングを実現する場合、適切な方法でキーを渡すことは必須ではありません。

于 2014-12-21T13:05:39.090 に答える