[REDIS] 루아 스크립트는 레디 스 HGETALL 통화에서 효율적인 사전을 반환
REDIS루아 스크립트는 레디 스 HGETALL 통화에서 효율적인 사전을 반환
나는 코드를 다음에 루아 스크립트와 추출 특정 값에서 레디 스 HMGET를 사용해야합니다. 그러나 redis.call ( 'HMGET', table_key, hkey1, hkey2를, ...)의 평면 배열을 반환 {hkey1, val1과, hkey2,을 val2, ...}
키 내가 쓴에서 값을 추출하려면 :
local function flat_map_get(flat_map, hash_key)
local i = 1
while flat_map[i] do
if flat_map[i] == hash_key then
return flat_map[i+1]
end
i = i+2
end
end
물론, 사용 증가함에 따라,이 함수를 여러 번 호출의 주요 성능 저하를 발표했다.
HMGET에 의해 반환 된 평면 배열에서 값을 읽을 수있는 효율적인 방법은 무엇입니까? 또는 그렇지 않으면 적절한 키 - 값 테이블에 반환 값을 변환하는?
해결법
-
==============================
1.일부 프로파일 링 및 테스트 후, 우리는 좋은 성능을 가지고 적절한 표를 얻기 위해 그것을 사용하는 다음과 같은 기능을 발견했다.
일부 프로파일 링 및 테스트 후, 우리는 좋은 성능을 가지고 적절한 표를 얻기 위해 그것을 사용하는 다음과 같은 기능을 발견했다.
이것은 각 해시 키 검색을위한 getter 함수를 호출 할 필요가 저장합니다.
local function hgetall(hash_key) local flat_map = redis.call('HGETALL', hash_key) local result = {} for i = 1, #flat_map, 2 do result[flat_map[i]] = flat_map[i + 1] end return result end
from https://stackoverflow.com/questions/34313598/lua-script-to-return-efficient-dictionary-from-redis-hgetall-call by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 gRPC에서 서버에서 클라이언트로 방송하는? (0) | 2020.01.08 |
---|---|
[REDIS] 셀러리 오류 : result.get은 시간 초과 (0) | 2020.01.08 |
[REDIS] 파이프 라인 명령에 대한 응답을 비활성화 레디 스 수 있습니까? (0) | 2020.01.08 |
[REDIS] 어떻게 레디 스는 캐시 된 데이터 또는 DB에서 신선한 데이터를 반환 할 경우 알아가는 것 (0) | 2020.01.08 |
[REDIS] Node.js를 & 레디 스; 끝까지 루프를 기다리는 중 (0) | 2020.01.08 |