[REDIS] 레디 스 - 반환 값으로 루아 테이블 - 왜이 작동하지 않습니다
REDIS레디 스 - 반환 값으로 루아 테이블 - 왜이 작동하지 않습니다
나는 레디 스를 통해이 코드를 실행하면 평가는 결과가 반환되지 않습니다. 어떤 생각이 왜 작동하지?
redis-cli EVAL "$(cat bug.lua)" 0
local retv = {}
retv["test"] = 1000
return retv
나는 테이블을 초기화하면 혼자 값은 인쇄 가져옵니다.
$ cat bug.lua
--!/usr/bin/env lua
local retv = {"This", "is", "a", "bug" }
retv["test"] = 1000
return retv
$ redis-cli EVAL "$(cat bug.lua)" 2 a b
1) "This"
2) "is"
3) "a"
4) "bug"
해결법
-
==============================
1.당신은 레디 스 EVAL 문서를 참조하는 경우 당신은 레디 스 응답에 루아 테이블을 변환하는 규칙 레디 스 용도가 무엇인지 볼 수 있습니다 :
당신은 레디 스 EVAL 문서를 참조하는 경우 당신은 레디 스 응답에 루아 테이블을 변환하는 규칙 레디 스 용도가 무엇인지 볼 수 있습니다 :
그래서 특별한 경우 2, 3를 제외하고, 레디 스는 여기 (nil의 요소를 발견 해당하는 소스 코드까지 테이블, ... 그것은 retv [1], retv [2]를 읽고 의미 시퀀스 (즉, 목록)로 가정 부분).
retv [ "시험"] 귀하의 경우에는 무시됩니다 이유를 설명.
당신은 당신의 코드를 변경하는 경우 :
local retv = {"This", "is", "a", "bug" } retv[5] = 1000 return retv
그런 다음이 추가 요소가 반환됩니다 :
1) "This" 2) "is" 3) "a" 4) "bug" 5) (integer) 1000
-
==============================
2.@deltheil에서 답변 유효합니다.
@deltheil에서 답변 유효합니다.
당신이 테이블을 포장하고 소비자에게 전달하는 cjson 라이브러리를 사용할 수 있지만 기억하십시오.
귀하의 루아 파일 :
local retv = {"This", "is", "a", "bug" } retv["test"] = 1000 return cjson.encode(retv)
명령:
redis-cli EVAL "$(cat bug.lua)" 0
결과:
"{\"1\":\"This\",\"2\":\"is\",\"3\":\"a\",\"4\":\"bug\",\"test\":1000}"
from https://stackoverflow.com/questions/24298763/redis-lua-tables-as-return-values-why-is-this-not-working by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 futures.rs와 레디 스 PubSub를 사용하여 차단 호출을위한 선물의 스트림을 구현하는 방법? (0) | 2020.01.16 |
---|---|
[REDIS] 애드온없이 가능한에게 Heroku에 레디 스인가? (0) | 2020.01.16 |
[REDIS] PHP - 레디 스 -를 직렬화없이 레디 스에서 PHP의 객체를 저장할 수있는 방법이 있습니까? (0) | 2020.01.16 |
[REDIS] 내 도메인에서 발생한 이벤트에서 RedMQ에서 핸들러를 설정하는 방법 (0) | 2020.01.16 |
[REDIS] 부팅에서 R 스크립트를 실행 (0) | 2020.01.16 |