2016-08-16 2 views
0

나는 다음과 같은 한 레디 스 LUA 스크립트 :레디 스 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) 

첫 번째 명령의 예상 결과는 '참'입니다. 첫 번째 명령의 키와 인수를 임의의 값으로 변경했으며 항상 '거짓'을 표시합니다. 누구든지 저를 도울 수 있습니까? Redis 2.8.17을 사용하고 있습니다.

답변

2

documentation regarding type conversion에 특별히이 줄을 참조하십시오 :

  • 레디 스 무기 호 대량 응답 및 무기 호 멀티 대량 응답 -> 루아 거짓 부울 유형

에 대한 것을 의미하여 스크립트가 예상대로 작동하려면 다음과 같이 변경해야합니다.

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

참고 :

  1. 레디 스 '는 기본적으로 반환하고, 그래서 프로토콜은 부울 유형이없는 문자열'참 '또는'거짓. ;
  2. 논리가 (거짓 다음 경우는 true) 카운터 직관적 루아가 ternary operator을 자랑하지 않지만,

BTW), 그것은 다음과 같은 동등한으로 시뮬레이션 할 수 있습니다 :

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

감사합니다 매우 많은! 나는 그 부분을 놓쳤다. –