복붙노트

[REDIS] 레디 스 - blpush이있다

REDIS

레디 스 - blpush이있다

프로세스를 통해 데이터 통신을 위해, 나는 레디 스 목록을 사용하려는. 소비자의 집합 BRPOP를 사용하여 목록의 내용을 소모하면서 생산자는 목록에 푸시합니다.

크기가 무한히 성장 목록을 제한하기 위해, 나는 고정 된 값 목록의 크기를 제한하려면 (10K 항목을 말한다). 나는 BLPUSH 또는 BRPUSH 같은 동등한 명령을 찾을 놀랐다. 의도적으로 레디 스의 사람들에 의해 이것을 생략되어 있습니까?

그래서, 내가 밀어 전에 목록의 크기를 확인하기 위해 시계 / 멀티와 TXN을 만들 수 있다고 가정합니다. 이것은 올바른 방법인가, 또는 더 나은 기술을 사용할 수?

해결법

  1. ==============================

    1.나는이 기능을위한 루아 스크립트 갈 것입니다.

    나는이 기능을위한 루아 스크립트 갈 것입니다.

    하나의 키 (목록 이름), 그리고 두 개의 인수, new_element_name 및 MAX_SIZE을 받아 LUA. 목록이 가득 찬 경우 반환 값은 LPUSH 반환 값 또는 -1이 될 수 있습니다. 다음은이 수행하는 스크립트는 다음과 같습니다

    if tonumber(ARGV[2]) > redis.call('LLEN', KEYS[1]) then
        return redis.call('LPUSH', KEYS[1], ARGV[1])  end 
    return -1
    

    당신은 SCRIPT 부하 한번로드해야합니다 :

    cat blpush.lua | redis-cli -x script load
    

    그리고 EVALSHA와 함께 사용

    evalsha 96d1fb35d6173758facda9dbc108296fd4a1512d 1 <myList> <new_element_name> <max_size>
    
  2. from https://stackoverflow.com/questions/27067177/redis-is-there-a-blpush by cc-by-sa and MIT license