[REDIS] 파이프 라인 명령에 대한 응답을 비활성화 레디 스 수 있습니까?
REDIS파이프 라인 명령에 대한 응답을 비활성화 레디 스 수 있습니까?
나는 현재의 요구는 이런 모든 통화에 대해 몇 백 개 카운터를 증가 캐시를 개발하고 있어요 :
redis.pipelined do
keys.each{ |key| redis.incr key }
end
내이 내가 할 대답은하지 여전히 레디 스 보석에 의해 수집 및 일부 우아하고 교통이 시간을 낭비하는 필요 지금 톱을 프로파일 링합니다. 나는 답장에 관심이 아니에요 어떤 방법으로 레디 스를 말할 수 있습니까? 값의 증가를 많이하는 더 좋은 방법이 있나요.
나는 예를 들어, MINCR 명령을 찾을 수 없습니다 ..
사전에 감사합니다!
해결법
-
==============================
1.예 ... 2.6에서, 적어도. 당신은 LUA 스크립트에서이 작업을 수행하고, 단순히 LUA 스크립트가 빈 결과를 반환있을 수 있습니다. 여기에는 booksleeve 클라이언트를 사용하고 있습니다 :
예 ... 2.6에서, 적어도. 당신은 LUA 스크립트에서이 작업을 수행하고, 단순히 LUA 스크립트가 빈 결과를 반환있을 수 있습니다. 여기에는 booksleeve 클라이언트를 사용하고 있습니다 :
const int DB = 0; // any database number // prime some initial values conn.Keys.Remove(DB, new[] {"a", "b", "c"}); conn.Strings.Increment(DB, "b"); conn.Strings.Increment(DB, "c"); conn.Strings.Increment(DB, "c"); // run the script, passing "a", "b", "c", "c" to // increment a & b by 1, c twice var result = conn.Scripting.Eval(DB, @"for i,key in ipairs(KEYS) do redis.call('incr', key) end", new[] { "a", "b", "c", "c"}, // <== aka "KEYS" in the script null); // <== aka "ARGV" in the script // check the incremented values var a = conn.Strings.GetInt64(DB, "a"); var b = conn.Strings.GetInt64(DB, "b"); var c = conn.Strings.GetInt64(DB, "c"); Assert.IsNull(conn.Wait(result), "result"); Assert.AreEqual(1, conn.Wait(a), "a"); Assert.AreEqual(2, conn.Wait(b), "b"); Assert.AreEqual(4, conn.Wait(c), "c");
또는 인수로 숫자 "에 의해"를 전달 incrby과 같은 일을 중간 부분을 변경합니다 :
// run the script, passing "a", "b", "c" and 1, 1, 2 // increment a & b by 1, c twice var result = conn.Scripting.Eval(DB, @"for i,key in ipairs(KEYS) do redis.call('incrby', key, ARGV[i]) end", new[] { "a", "b", "c" }, // <== aka "KEYS" in the script new object[] { 1, 1, 2 }); // <== aka "ARGV" in the script
-
==============================
2.아니, 이건 수 없습니다. 응답하지 레디 스를 알 수있는 방법은 없습니다.
아니, 이건 수 없습니다. 응답하지 레디 스를 알 수있는 방법은 없습니다.
몇 가지 포인트에서 응답을 위해 기적을 기다리고 피할 수있는 유일한 방법은 (Node.js를 또는 비동기 모드에서 hiredis 등) 완전히 비동기 클라이언트를 실행하는 것입니다.
-
==============================
3.레디 스의 버전 3.2은 명시 적으로 지원합니다 :
레디 스의 버전 3.2은 명시 적으로 지원합니다 :
https://redis.io/commands/client-reply
클라이언트 REPLY 명령 제어 서버는 클라이언트의 명령을 응답할지 여부를 지정합니다. 다음 모드를 사용할 수 있습니다 : 의 위에. 이 서버가 모든 명령에 대한 응답을 반환하는 기본 모드입니다. 떨어져서. 이 모드에서 서버는 클라이언트의 명령에 응답하지 않습니다. 건너 뛰기. 이 모드는 즉시 후 명령의 응답을 건너 뜁니다.
반환 값 하나 OFF 또는 SKIP 하위 명령을 호출 할 때, 아무 응답이 이루어지지 않습니다. ON 호출하는 경우 : 단순 문자열 응답 : OK.
from https://stackoverflow.com/questions/13025165/can-redis-disable-the-replies-for-pipelined-commands by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 셀러리 오류 : result.get은 시간 초과 (0) | 2020.01.08 |
---|---|
[REDIS] 루아 스크립트는 레디 스 HGETALL 통화에서 효율적인 사전을 반환 (0) | 2020.01.08 |
[REDIS] 어떻게 레디 스는 캐시 된 데이터 또는 DB에서 신선한 데이터를 반환 할 경우 알아가는 것 (0) | 2020.01.08 |
[REDIS] Node.js를 & 레디 스; 끝까지 루프를 기다리는 중 (0) | 2020.01.08 |
[REDIS] ServiceStack.Redis : 없음 연결 대상 : 스포츠 : 0 (0) | 2020.01.07 |