2017-02-08 5 views
1

Es scheint, die folgende Redis Lua Script false statt nil zurückgibt, die zu widerspricht, was das Dokument sagt:Redis Lua Script redis.call ('get', 'nonexisting') Rückgabewert

> eval "local r = redis.call('get', 'none'); if r==nil then return 42 end" 0 
(nil) 
> eval "local r = redis.call('get', 'none'); if r==false then return 42 end" 0 
(integer) 42 
> eval "local r = redis.call('get', 'none'); if not r then return 42 end" 0 
(integer) 42 

die erste eval unter der Bedingung gescheitert r==nil, scheint der zweite eval zu beweisen, dass der Rückgabewert false

ist Es scheint mit not r die sicherste Option, die ich in der Hand haben, aber die Dokumentation here sagt, dass die GET Befehl nil

Ist das etwas, was jeder sonst hat beobachtet, und unter Berufung auf eine Tatsache, dass das sicherste Redis Lua Script Überprüfung auf Befehle geben würde Rückkehr nil ist not r zu benutzen?

Antwort

3

Ok, grub tiefer in den documentation, Redis nil konvertiert zu false in Lua-Skripten:

Redis zu Lua Umrechnungstabelle.

  • Redis integer Antwort -> Lua Zahl
  • Redis bulk Antwort -> Lua String
  • Redis Multi bulk Antwort -> Lua-Tabelle (kann andere verschachtelte Redis Datentypen)
  • Redis Status Antwort - > Lua-Tabelle mit einem einzigen oken Feld, um den Status
  • Redis Fehlerantwort enthält -> Lua-Tabelle mit einem einzigen err Feld mit dem Fehler
  • Redis Nil bulk Antwort und Nil Multi bu lk Antwort -> Lua false boolean Typ
+0

Hmm ... Eine Art nilophobia in Redis? –

Verwandte Themen