2016-01-12 13 views
7

でLuaのを使用しているとき、私は時にコールhttp://redis.io/commands/eval私はRedisのクラスタ私はRedisのクラスタ

への移行を検討しているのLuaスクリプトは、私は完全なキー名を指定する必要があります持っている完全なキー名を指定する必要がありますか? ハッシュタグを指定するだけでも問題は解決しますか?私が代わりに{UNIQUE_HASH_TAG}/KEY1、{UNIQUE_HASH_TAG}/KEY2でのみ {UNIQUE_HASH_TAG}を渡したい例えば

...など

私は鍵をたくさん持っている、とロジックはかなり複雑です - 時々Iキー名は動的に生成されますが、内には同じハッシュタグが入ります。

キー名の代わりにハッシュタグを渡すことで仕様に違反しますか?

答えて

3

私はお勧めのフルキー名

を指定する必要があります。

私は、仕様がキー名を明示的に渡す必要があること状態はありませんいくつかの仕様

に違反します。 KEYS/ARGVメカニズムは、クラスタの準備として、実際にクラスタが来る前に配置されました。その時、ハッシュタグはクラスタの設計の一部ではないので、の推奨は、同じクラスタハッシュスロットに入れる保証がないため、スクリプトでキー名をハードコード/動的に生成することを避けることでした。

あなたのアプローチは完全に有効で、期待通りに動作します。私は、いわゆる{UNIQUE_HASH_TAG}の多くを管理している場合にのみこれが意味をなさないことを強調したいと思います。そうしないと、スケーラビリティ上の課題になる可能性があるスロットが数個しかないことになります。

EDIT:言ったことすべては、あなたが本当に常には、明示的にだましではなく、スクリプトにキー名を渡す必要があります。これは現在ブロックされていませんが、この不特定の動作は将来変更され、コードが破損する可能性があります。

+0

これは私のマイグレーションを完全に不可能にするでしょう。残念ながら、その場でキーを作成することは避けられません(ネストされたデータ型がセット内にある場合、これは必要ありません)。しかし、ハッシュタグ内でそれをしなさい... – let4be

+1

私の仕事のために、私はノード間の私のデータのバランスをとる能力のようなredisクラスタから特定の機能だけを必要とします。別の方法として、Lua + 'Move'コマンドで手動で実装することを検討しています(データセットを使用不可としてマークし、単一のキーの中でデータセットをシリアル化し、別のインスタンスにアトミックに移動し、デシリアライズし、データセット) - しかし、これはホイールを再発明するように見える – let4be

関連する問題