[REDIS] 레디 스 - blpush이있다
REDIS레디 스 - blpush이있다
프로세스를 통해 데이터 통신을 위해, 나는 레디 스 목록을 사용하려는. 소비자의 집합 BRPOP를 사용하여 목록의 내용을 소모하면서 생산자는 목록에 푸시합니다.
크기가 무한히 성장 목록을 제한하기 위해, 나는 고정 된 값 목록의 크기를 제한하려면 (10K 항목을 말한다). 나는 BLPUSH 또는 BRPUSH 같은 동등한 명령을 찾을 놀랐다. 의도적으로 레디 스의 사람들에 의해 이것을 생략되어 있습니까?
그래서, 내가 밀어 전에 목록의 크기를 확인하기 위해 시계 / 멀티와 TXN을 만들 수 있다고 가정합니다. 이것은 올바른 방법인가, 또는 더 나은 기술을 사용할 수?
해결법
-
==============================
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>
from https://stackoverflow.com/questions/27067177/redis-is-there-a-blpush by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 우리는 hiredis에 의해 레디 스에서 키의 값으로 C의 int 배열을 설정할 수 있습니까? (0) | 2020.01.21 |
---|---|
[REDIS] 어떻게 루아 스크립트의 한계에서 레디 스 호출을 피하기 위해? (0) | 2020.01.21 |
[REDIS] 봄 데이터 레디 스 여러 레디 스 서버에 연결 (0) | 2020.01.21 |
[REDIS] 어떻게 Webmachine 및 eredis 작업을 함께 만들 수 있습니까? (0) | 2020.01.21 |
[REDIS] 아마존 Elasticache 레디 스 클러스터 - 엔드 포인트를 가져올 수 없습니다 (0) | 2020.01.21 |