redisクラスタ実行lua
1、問題
シングルマシンモードではluaスクリプトを実行しても問題ありません.クラスタ実行後にエラーを報告
2、解決
Redisは、単一のLuaスクリプト操作のkeyが同じノードにある必要があるためですが、Clusterはデータを自動的に異なるノードに分散します(仮想の16384個のslot、具体的には公式ドキュメントを参照).
Redis clusterはマルチキー操作に制限があり、コマンド内のすべてのキーが1つのslotに属してこそ実行できるように要求されます.
keySlotアルゴリズムでは、keyに{}が含まれている場合、最初の{}内部の文字列をhash keyとして使用し、同じ{}内部の文字列を持つkeyが同じslotを持つことを保証します.
公式住所:https://redis.io/commands/cluster-keyslot
シングルマシンモードではluaスクリプトを実行しても問題ありません.クラスタ実行後にエラーを報告
ERR Error running script (call to f_4a610f5543b3c3450220da7bd47825d3b6bffae8): @user_script:1: @user_script: 1: Lua script attempted to access a non local key in a cluster node
2、解決
Redisは、単一のLuaスクリプト操作のkeyが同じノードにある必要があるためですが、Clusterはデータを自動的に異なるノードに分散します(仮想の16384個のslot、具体的には公式ドキュメントを参照).
Redis clusterはマルチキー操作に制限があり、コマンド内のすべてのキーが1つのslotに属してこそ実行できるように要求されます.
> CLUSTER KEYSLOT somekey
11058
> CLUSTER KEYSLOT foo{hash_tag}
(integer) 2515
> CLUSTER KEYSLOT bar{hash_tag}
(integer) 2515
keySlotアルゴリズムでは、keyに{}が含まれている場合、最初の{}内部の文字列をhash keyとして使用し、同じ{}内部の文字列を持つkeyが同じslotを持つことを保証します.
公式住所:https://redis.io/commands/cluster-keyslot