Redis Cluster での Lua script に関して
Redis Cluster の Slot に関して
Redis Cluster は slot(shard) が 16384個あり、それぞれの node がその slot を複数保持している。 ある key がどの slot に割当られるのかは、以下の計算で行われる。
slot_num = CRC16(key) mod 16384
また、key に {...}
を使用することで slot の計算に使われる部分を指定することができる。
{userId10000}:score
{userId10000}:friends
は、同じ slot に含まれる。
Lua script with Redis Cluster
Redis Clusterでも、 KEYS が全て同じ slot なら Lua script が使える 。
例えば、こういうのは大丈夫。
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 {key1}hoge {key1}bar first second 1) "{key1}hoge" 2) "{key1}bar" 3) "first" 4) "second"
が、 keys に異なるslotが含まれると redis cluster は処理することができない。
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 {key1}hoge {key2}bar first second (error) CROSSSLOT Keys in request don't hash to the same slot