복붙노트

[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. ==============================

    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
    
  2. from https://stackoverflow.com/questions/34313598/lua-script-to-return-efficient-dictionary-from-redis-hgetall-call by cc-by-sa and MIT license