[REDIS] 레디 스에서 제한 목록 길이
REDIS레디 스에서 제한 목록 길이
나는 레디 스 목록을 사용하여 목록에 새 항목을 밀어하고 있습니다. 문제는 내가 정말에만 목록에서 가장 최근의 10 항목이 필요합니다.
나는 목록에 항목을 추가하고 10 가장 최근의를 얻을 수 lrange하는 lpush을 사용하고 있습니다.
특정 숫자 후 아이템을 드롭 어쨌든이 있나요? 나는 항목의 1,000의를 가질 수 있으며, 대기 시간과 성능 문제가 발생할 수 있습니다 목록을하게 될 겁니다.
감사합니다!
해결법
-
==============================
1.모든 lpush 후, 10 개 요소 목록을 트리밍 LTRIM 전화
모든 lpush 후, 10 개 요소 목록을 트리밍 LTRIM 전화
http://redis.io/commands/ltrim 참조
-
==============================
2.당신은 간헐적으로 어떤 LPUSH 후 LTRIM을 사용할 수 있습니다 (레디 스 정말 빠르고하지만,하지만 당신은 LPUSH 작업을 많이 절약 할 수 있습니다) 그 앱에서 전체 대기 시간에 추가하는 것처럼 모든 LPUSH 후 LTRIM를 호출 할 필요가 없습니다
당신은 간헐적으로 어떤 LPUSH 후 LTRIM을 사용할 수 있습니다 (레디 스 정말 빠르고하지만,하지만 당신은 LPUSH 작업을 많이 절약 할 수 있습니다) 그 앱에서 전체 대기 시간에 추가하는 것처럼 모든 LPUSH 후 LTRIM를 호출 할 필요가 없습니다
다음은 대략 매 5 LPUSH상의 LTRIM을 달성하기 위해 의사 코드는 다음과 같습니다
LPUSH mylist 1 random_int = some random number between 1-5 if random_int == 1: # trim my list with 1/5 chance LTRIM mylist 0 10
목록은 몇 가지 요소를 항상 10 개 이상의 요소로 성장할 수 있지만,하지만 그것은 반드시 정기적으로 잘릴 것입니다. 이 방법은 가장 실용적인 목적을 위해 좋은 빠르게 당신의 밀어를 유지, LTRIM 작업을 많이 절약 할 수 있습니다.
-
==============================
3.다음 코드,
다음 코드,
트랜잭션한다.
MULTI LPUSH list "item1" LTRIM list 0 9 LRANGE list 0 9 EXEC
-
==============================
4.그냥 대안. LPUSH의 공식 문서에 따르면, 푸시 작업 후리스트의 길이를 반환합니다. 당신은 (> 귀하의 경우 K 10)을 K 같은 임계 길이를 설정하고 길이가 K보다 큰 돌아 왔을 때 LTRIM를 호출 할 수 있습니다. 샘플 의사 코드는 다음과 같이 :
그냥 대안. LPUSH의 공식 문서에 따르면, 푸시 작업 후리스트의 길이를 반환합니다. 당신은 (> 귀하의 경우 K 10)을 K 같은 임계 길이를 설정하고 길이가 K보다 큰 돌아 왔을 때 LTRIM를 호출 할 수 있습니다. 샘플 의사 코드는 다음과 같이 :
len = LPUSH mylist xxx if len > k: LTRIM mylist 0 9 LRANGE mylist 0 9
그것은 임의의 방법보다 더 제어합니다. 큰 k를 트리거 적은 LTRIM하지만 메모리의 비용. 당신은 당신이 여분의 명령이 더 비싼 호출 이후 LTRIM를 호출하는 빈도에 따라 K를 조정할 수 있습니다.
-
==============================
5.아무도는 가장 최근 10 개 항목을 저장하기위한 정확한 솔루션을 제공합니다.
아무도는 가장 최근 10 개 항목을 저장하기위한 정확한 솔루션을 제공합니다.
하자 (여기서는 단지 숫자) 15 개 항목과 샘플 목록을 작성 :
RPUSH list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
이제 목록의 끝에서 오프셋을 나타냅니다 :
LTRIM list -10 -1
목록 표시
LRANGE list 0 -1 1) "6" 2) "7" 3) "8" 4) "9" 5) "10" 6) "11" 7) "12" 8) "13" 9) "14" 10) "15"
이제 새로운 아이템과 실행 트림을 추가 할 수 있습니다 :
RPUSH list 16 LTRIM list -10 -1 1) "7" 2) "8" 3) "9" 4) "10" 5) "11" 6) "12" 7) "13" 8) "14" 9) "15" 10) "16"
from https://stackoverflow.com/questions/12060004/limit-list-length-in-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레일 레디 스 펍 / 하위 (0) | 2020.01.05 |
---|---|
[REDIS] (클라이언트 측) 자바 스크립트와 레디 스에 직접 연결? (0) | 2020.01.05 |
[REDIS] 레디 스 바인드 한 개 이상의 IP에 (0) | 2020.01.05 |
[REDIS] 아웃 프로세스의 구현 캐시 윈도우 푸른에 레디 스를 사용하여 (0) | 2020.01.05 |
[REDIS] 레디 스 및 Membase 사이의 주요 차이점은 무엇입니까? (0) | 2020.01.05 |