2016-08-16 4 views
0

私は、次のしているRedisのLUAスクリプト:RedisのLUAスクリプト条件摘み間違ったreturn文

zscore stats test 

の検索結果を:その次のコマンドはnilを返すものの、私はいつも、 'false' に得るリターンで

eval "if redis.call('ZSCORE', KEYS[1], ARGV[1]) == nil then return 'true' else return 'false' end" 1 stats test 

(nil) 

期待される最初のコマンドの結果は 'true'です。私は最初のコマンドのキーと引数をランダムな値に変更しました。私はいつも「偽」になります。誰もそれで私を助けることができますか?私はRedis 2.8.17を使用しています。

答えて

2

特にこのライン、documentation regarding type conversionを参照してください:

  • Redisのナシバルクリプライやナシマルチバルクリプライ - > Luaの偽boolean型

あなたのためのことを意味しますスクリプトが正常に動作するようにするには、次のように変更する必要があります。

eval "if redis.call('ZSCORE', KEYS[1], ARGV[1]) == false then return 'true' else return 'false' end" 1 stats test 

注:

  1. Redisのあなたは基本的に戻っているように、プロトコルは、ブール型がない文字列は 『true』または 『』偽。
  2. ロジックは、(偽その後、trueの場合)カウンタ直感的であり、Luaがternary operatorを遊ばすませんが、それは次のよう同等でシミュレートすることができ、BTW

):非常に

eval "return redis.call('ZSCORE', KEYS[1], ARGV[1]) and 'false' or 'true'" 1 stats test 
+0

感謝多く!私は仕様でその部分を逃した。 –

関連する問題