>데이터 베이스 >Redis >Redis에서 목록을 사용하는 경우

Redis에서 목록을 사용하는 경우

藏色散人
藏色散人원래의
2019-06-11 09:50:014258검색

Redis 목록(list)은 삽입 순서로 정렬된 간단한 문자열 목록입니다. 목록의 헤드(왼쪽) 또는 꼬리(오른쪽)에 요소를 추가할 수 있으며 목록에는 최대 232 - 1개의 요소(4294967295, 목록당 40억 개 이상의 요소)가 포함될 수 있습니다. (권장: "redis 비디오 튜토리얼")

Redis에서 목록을 사용하는 경우

list

공용 명령:

lpush, rpush, lpop, rpop, lrange, BLPOP(차단 버전) 등

응용 시나리오:

Redis 목록에는 다양한 응용 시나리오가 있으며 이는 Redis의 가장 중요한 데이터 구조 중 하나이기도 합니다.

최신 뉴스 순위 등의 기능을 쉽게 구현할 수 있습니다.

목록의 또 다른 응용 프로그램은 목록의 PUSH 작업을 사용하여 작업을 목록에 저장한 다음 작업자 스레드가 POP 작업을 사용하여 실행할 작업을 꺼내는 것입니다.

구현 방법:

Redis 목록은 역방향 검색 및 순회를 지원할 수 있는 이중 연결 목록으로 구현되어 작동이 더 편리합니다. 그러나 Redis 내의 많은 구현에는 추가 메모리 오버헤드가 포함됩니다. 송신 버퍼 큐 등도 이 데이터 구조를 사용합니다.

RPOPLPUSH 소스 대상

RPOPLPUSH 명령은 하나의 원자 시간에 다음 두 작업을 수행합니다.

목록 소스의 마지막 요소(꼬리 요소)를 팝하고 클라이언트에 반환합니다.

소스에서 팝된 요소를 대상 목록의 헤드 요소로 목록 대상에 삽입합니다.

원본과 대상이 동일하면 목록의 꼬리 요소가 머리로 이동되고 요소가 반환됩니다. 이 특별한 경우는 목록의 회전 작업으로 간주될 수 있습니다.

일반적인 예는 서버 모니터링 프로그램입니다. 접근성을 보장하기 위해 가능한 한 짧은 시간에 여러 웹사이트 그룹을 병렬로 확인해야 합니다.

    redis.lpush "downstream_ips", "192.168.0.10"  
    redis.lpush "downstream_ips", "192.168.0.11"  
    redis.lpush "downstream_ips", "192.168.0.12"  
    redis.lpush "downstream_ips", "192.168.0.13"  
    Then:  
    next_ip = redis.rpoplpush "downstream_ips", "downstream_ips"

BLPOP

작업, 명령, 요청의 세 가지 목록이 있고 명령과 요청 모두 비어 있지 않은 목록을 보유하고 있다고 가정합니다. 다음 명령을 고려하십시오.

BLPOP 작업 명령 요청 30 #Block for 30. 0이면 무기한 차단됩니다. 그런 다음 명령 목록의 첫 번째 요소가 팝업됩니다.

1) 명령                                                                                                                                     간단한 예로 목록을 사용하여 작업 대기열을 구현하는 경우입니다. 작업을 실행하는 스레드는 pop의 차단 버전을 호출하여 작업을 얻을 수 있으므로 작업이 존재하는지 확인하기 위한 폴링을 피할 수 있습니다. 작업자 스레드는 작업이 오면 즉시 반환할 수 있으며 폴링으로 인한 지연을 피할 수도 있습니다.

위 내용은 Redis에서 목록을 사용하는 경우의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.