복붙노트

[REDIS] 레디 스에서 제한 목록 길이

REDIS

레디 스에서 제한 목록 길이

나는 레디 스 목록을 사용하여 목록에 새 항목을 밀어하고 있습니다. 문제는 내가 정말에만 목록에서 가장 최근의 10 항목이 필요합니다.

나는 목록에 항목을 추가하고 10 가장 최근의를 얻을 수 lrange하는 lpush을 사용하고 있습니다.

특정 숫자 후 아이템을 드롭 어쨌든이 있나요? 나는 항목의 1,000의를 가질 수 있으며, 대기 시간과 성능 문제가 발생할 수 있습니다 목록을하게 될 겁니다.

감사합니다!

해결법

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

    1.모든 lpush 후, 10 개 요소 목록을 트리밍 LTRIM 전화

    모든 lpush 후, 10 개 요소 목록을 트리밍 LTRIM 전화

    http://redis.io/commands/ltrim 참조

  2. ==============================

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

    3.다음 코드,

    다음 코드,

    트랜잭션한다.

    MULTI
    LPUSH list "item1"
    LTRIM list 0 9
    LRANGE list 0 9
    EXEC
    
  4. ==============================

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

    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"
    
  6. from https://stackoverflow.com/questions/12060004/limit-list-length-in-redis by cc-by-sa and MIT license