[Redis 필기 (4)] Redis 데이터 구조 - list 링크

21409 단어
오리지널 작품, 전재 표시:http://blog.csdn.net/Xiejingfa/article/details/50573605
앞에서 소개 한 바 와 같이 우 리 는 Redis 에서 string 문자열, hash 해시 라 는 두 가지 데이터 구조의 상용 명령 을 배 웠 다.이 글 은 Redis 의 list – 목록 에 대한 동작 을 소개 합 니 다.
만약 당신 이 string 과 hash 가 무엇 인지 모른다 면, 먼저 나의 앞의 두 문장 을 볼 수 있 습 니 다.
  • [Redis 필기 (2)] Redis 데이터 구조 스 트 링 문자열
  • [Redis 필기 (3)] Redis 데이터 구조 - hash 해시
  • 목록 형식 소개
    Redis 의 list 유형 은 사실 string 형식의 양 방향 링크 입 니 다.데이터 구 조 를 배 운 어린이 신발 은 양 방향 링크 인 만큼 머리 나 꼬리 에서 요 소 를 삽입 하고 삭제 하 는 것 을 쉽게 찾 을 수 있다 는 것 을 잘 알 고 있다.이렇게 하면 list 는 스 택 이나 대기 열 로 사용 할 수 있 습 니 다.Redis 에서 list 의 최대 길 이 는 2 ^ 32 - 1 입 니 다.
    list 관련 명령
    1. lpush 명령
    lpush 명령 은 목록 의 머리 에 하나 이상 의 요 소 를 삽입 합 니 다. 지정 한 key 가 존재 하지 않 으 면 빈 목록 을 만 듭 니 다. 지정 한 key 가 list 형식 이 아니라면 오 류 를 되 돌려 줍 니 다.구체 적 인 형식 은:
    lpush key value...

    예시 1:
    127.0.0.1:6379> lpush mylist a b c
    (integer) 3
    127.0.0.1:6379> set mystr not_a_list
    OK
    127.0.0.1:6379> lpush mystr d
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    127.0.0.1:6379>

    2. lrange 명령
    위 에서, 우 리 는 lpush 명령 을 사용 하여 목록 에 요 소 를 추 가 했 습 니 다. 그러면 지정 한 요소 가 목록 에 삽입 되 었 다 는 것 을 어떻게 압 니까?이것 은 목록 에서 지정 한 범위 의 요 소 를 볼 수 있 는 lrange 명령 을 사용 할 수 있 습 니 다.이 명령 의 구체 적 인 형식 은 다음 과 같다.
    lrange key start stop

    lrrange 명령 에 대해 우 리 는 몇 가 지 를 알 아야 합 니 다.
  • lrrange 는 목록 에 표 시 된 범위 가 [start, stop] 에 있 는 요 소 를 되 돌려 줍 니 다.
  • 목록 의 아래 표 시 된 오프셋 은 0, 즉 0 에서 시작 합 니 다.이것 은 우리 가 프로 그래 밍 언어 에 있 는 배열 아래 표 시 된 계산 방식 과 일치 합 니 다.
  • 오프셋 은 마이너스 일 수 있 으 며, 이 오프셋 은 목록 의 끝부분 부터 계산 한 다 는 것 을 나타 낸다.예 를 들 어 - 1 은 목록 의 마지막 요 소 를 나타 낸다.
  • 주어진 아래 표 시 는 목록 아래 표 시 된 범 위 를 초과 하면 Redis 에 오류 가 발생 하지 않 습 니 다.start 가 목록 의 끝 에 표 시 된 것 보다 크 면 빈 목록 을 되 돌려 줍 니 다. stop 이 목록 의 끝 에 표 시 된 것 보다 크 면 Redis 는 목록 의 끝 에 표 시 된 것 을 실제 stop 값 으로 간주 합 니 다.예시 2:
  • 127.0.0.1:6379> lpush mylist a b c
    (integer) 3
    127.0.0.1:6379> lrange mylist 0 -1
    1) "c"
    2) "b"
    3) "a"
    

    3. lpushx 명령
    lpushx 명령 도 목록 머리 에 요 소 를 삽입 하 는 데 사 용 됩 니 다.lpush 와 달리 키 가 존재 하지 않 을 때 이 명령 은 빈 목록 을 만 들 지 않 습 니 다. 다른 하 나 는 아무런 조작 도 하지 않 고 바로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
    lpushx key value

    예시 3:
    127.0.0.1:6379> lpushx mylist a
    (integer) 0
    127.0.0.1:6379> lrange mylist 0 -1
    (empty list or set)
    127.0.0.1:6379> lpush mylist a
    (integer) 1
    127.0.0.1:6379> lpushx mylist b
    (integer) 2
    127.0.0.1:6379> lrange mylist 0 -1
    1) "b"
    2) "a"
    

    4. rpush 명령
    앞에서 소개 한 바 와 같이 list 는 실제 적 으로 양 방향 링크 입 니 다. rpush 명령 을 사용 하여 목록 의 끝 에 하나 이상 의 요 소 를 삽입 할 수 있 습 니 다.이 명령 은 작업 이 성공 하면 목록 의 길 이 를 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
    rpush key value

    예시 4:
    127.0.0.1:6379> lpush mylist a b c
    (integer) 3
    127.0.0.1:6379> rpush mylist d e f
    (integer) 6
    127.0.0.1:6379> lrange mylist 0 -1
    1) "c"
    2) "b"
    3) "a"
    4) "d"
    5) "e"
    6) "f"
    

    5. rpushx 명령
    rpushx 명령 은 목록 끝 에 요 소 를 삽입 합 니 다.rpush 와 달리 지정 한 목록 이 존재 하지 않 을 때 이 명령 은 빈 목록 을 만 들 지 않 고 바로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
    rpushx key value

    예시 5:
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> rpushx mylist a
    (integer) 0
    127.0.0.1:6379> lrange mylist 0 -1
    (empty list or set)
    127.0.0.1:6379> lpush mylist a
    (integer) 1
    127.0.0.1:6379> rpushx mylist b
    (integer) 2
    127.0.0.1:6379> lrange mylist 0 -1
    1) "a"
    2) "b"

    6. lpop 명령
    lpop 명령 은 list 의 헤더 요 소 를 제거 하고 되 돌려 줍 니 다.목록 이 비어 있 으 면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
    lpop key

    예시 6:
    127.0.0.1:6379> lpush mylist a
    (integer) 1
    127.0.0.1:6379> lpop mylist 
    "a"
    127.0.0.1:6379> lpop mylist
    (nil)

    7. rpop 명령
    rpop 명령 은 목록 의 끝 요 소 를 제거 하고 되 돌려 줍 니 다. 목록 이 비어 있 으 면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
    rpop key

    예시 7:
    127.0.0.1:6379> lpush mylist a b
    (integer) 2
    127.0.0.1:6379> rpop mylist
    "a"
    127.0.0.1:6379> rpop mylist
    "b"
    

    8. lrem 명령
    lrem 명령 은 목록 에서 이전 count 번 에 나타 난 값 이 value 인 요 소 를 제거 하고 제 거 된 요소 의 개 수 를 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
    lrem key count value

    그 중 count 의 의 미 는 다음 과 같다.
  • count = 0: 모든 값 이 value 인 요 소 를 제거 합 니 다
  • count > 0: 머리 에서 꼬리 까지 count 개 값 이 value 인 요 소 를 제거 합 니 다
  • count < 0: 꼬리 에서 머리 로 제거 | count | (절대 값) 개 값 이 count 인 원소 예시 8:
  • 127.0.0.1:6379> lpush mylist a b a b c a e f
    (integer) 8
    127.0.0.1:6379> lrem mylist 0 a
    (integer) 3
    127.0.0.1:6379> lrange mylist 0 -1
    1) "f"
    2) "e"
    3) "c"
    4) "b"
    5) "b"
    127.0.0.1:6379> 

    9. ltrim 명령
    lrim 명령 은 지정 한 목록 을 자 르 고 아래 표 시 된 범 위 를 [start, stop] 로 유지 하 는 데 사 용 됩 니 다.이 가운데 start, stop 은 모두 0 부터 계산 되 며, 목록 꼬리 와 의 오프셋 을 음수 로 표시 하 는 것 도 지원 합 니 다.구체 적 인 형식 은 다음 과 같다.
    ltrim key start stop

    예시 9:
    127.0.0.1:6379> lpush mylist a b c d e f //       f e d c b a 
    (integer) 6
    127.0.0.1:6379> ltrim mylist 0 2
    OK
    127.0.0.1:6379> lrange mylist 0 -1
    1) "f"
    2) "e"
    3) "d"
    

    10. lindex 명령
    lindex 명령 은 목록 에서 아래 표 시 된 요 소 를 되 돌려 줍 니 다. 아래 표 시 는 0 부터 계산 하고 마이너스 로 목록 끝 에서 시작 하 는 오프셋 값 을 표시 할 수 있 습 니 다.지정 한 아래 표 가 목록 의 아래 표 범 위 를 초과 하면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
    lindex key index

    예시 10:
    127.0.0.1:6379> lpush mylist a b c d e f
    (integer) 6
    127.0.0.1:6379> lindex mylist 2
    "d"

    11. llen 명령
    llen 명령 은 목록 의 길 이 를 되 돌려 줍 니 다. 지정 한 목록 이 존재 하지 않 으 면 Redis 는 빈 목록 으로 하고 길 이 를 0 으로 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
    llen key

    예시 11:
    127.0.0.1:6379> lpush mylist 1 2 3
    (integer) 3
    127.0.0.1:6379> llen mylist
    (integer) 3

    12. linsert 명령
    linsert 는 명령 을 삽입 합 니 다. 목록 에서 지정 한 요 소 를 찾 고 이 요소 앞 이나 뒤에 요 소 를 삽입 합 니 다.지정 한 목록 이 존재 하지 않 으 면 아무런 조작 도 하지 않 습 니 다.이 명령 의 반환 값 은 삽입 작업 을 실행 한 후 목록 의 길이 이 며, 지정 한 값 을 찾 지 못 하면 - 1 을 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
    linsert key after|before search value

    예시 12:
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> rpush mylist a b c d
    (integer) 4
    127.0.0.1:6379> linsert mylist before b b1
    (integer) 5
    127.0.0.1:6379> lrange mylist 0 -1
    1) "a"
    2) "b1"
    3) "b"
    4) "c"
    5) "d"
    127.0.0.1:6379> linsert mylist before z no
    (integer) -1

    13. rpoplpush 명령
    rpoplpush 명령 은 두 목록 을 원자 로 조작 합 니 다. 목록 source 의 꼬리 요 소 를 꺼 내 dest 목록 의 머리 에 넣 습 니 다.목록 source 가 존재 하지 않 으 면 nil 값 을 되 돌려 주 고 아무런 조작 도 하지 않 습 니 다.구체 적 인 형식 은 다음 과 같다.
    rpoplpush source dest:

    예시 13:
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> rpush mylist1 a b
    (integer) 2
    127.0.0.1:6379> rpush mylist2 c d
    (integer) 2
    127.0.0.1:6379> rpoplpush mylist1 mylist2
    "b"
    127.0.0.1:6379> lrange mylist1 0 -1
    1) "a"
    127.0.0.1:6379> lrange mylist2 0 -1
    1) "b"
    2) "c"
    3) "d"
    

    14. lset 명령
    lset 명령 은 아래 표 시 된 요소 의 값 을 설정 하 는 데 사 용 됩 니 다.구체 적 인 형식 은 다음 과 같다.
    lset key index value

    예시 14:
    127.0.0.1:6379> rpush mylist a b
    (integer) 2
    127.0.0.1:6379> lset mylist 0 c
    OK
    127.0.0.1:6379> lrange mylist 0 -1
    1) "c"
    2) "b"
    

    그 밖 에 list 의 pop 작업 은 차단 버 전이 있 습 니 다.
    blpop key timeout
    brpop key timeout  
    brpoplpush source destination timeout         

    timeout 은 시간 초과 기다 리 기 위해, timeout 이 0 이면 계속 기 다 립 니 다.

    좋은 웹페이지 즐겨찾기