Redis LINKED List of LISTS

<< ZIP List of LISTS QUICK List of LISTS >>

LINKED LIST Data Structure

Doubly Linked List

    리스트에서 사용하는 양 항뱡 링크드 리스트 구조는 대부분 아는 데이터 구조이므로, 여기서는 전체적인 구조와 주요 function들을 살펴봅시다.
    아래 그림에서 보는 것처럼, 맨 앞(head) 노드와 맨 뒤(tail) 노드 그리고 노드 개수를 가지고 있는 리스트(list)가 있고, 각 노드는 포인터로 앞, 뒤로 연결되어 있고, 값을 가지고 있는 redisObject를 가리키는 포인터로 구성되어 있다.  
    redis linked list overview

    다음은 이 데이터 구조와 리스트 function을 연결해서 어느 곳에서 동작하는지 알아보자.   주요 function 위주로 연결했다.
    redis linked list and functions
    • LPUSH, LPOP은 앞(head)에서 동작하고,
    • RPUSH, RPOP은 뒤(tail)에서 동작하고,
    • LINSERT는 새 노드를 특정 노드 앞 또는 뒤에 넣고,
    • LREM은 한 노드를 삭제하고,
    • LTRIM은 여러 노드를 삭제한다.

redis.conf에 있는 관련 파라미터

  • list-max-ziplist-entries 512 : 엔트리 수가 512 이하면 짚 리스트, 512보다 많으면 링크드 리스트
  • list-max-ziplist-value 64 : 값의 크기(바이트)가 64 이하면 짚 리스트, 64보다 크면 링크드 리스트
  • 위 두 조건은 OR 조건이다. 어느 것 하나라도 만족하면 링크드 리스트로 변경된다.
  • 단, 증가할 때만 해당되고, 줄어든다고 다시 짚 리스트로 바꾸지 않는다.   이유는 512 엔트리에서 push와 pop이 반복되어 엔트리 수가 512와 513을 왔다 갔다 하면 데이터 타입 변경이 계속 발생한다.   데이터 타입 변경은 push 나 pop 처리 시간보다 수백 배 더 걸리므로 성능에 매우 악 영향을 미친다.   따라서 한번 링크드 리스트로 바뀌면 다시는 데이터 타입 변환이 발생하지 않는다.

LIST와 Linked List function 연결 관계

redis linked list and functions



<< ZIP List of LISTS LINKED List of LISTS QUICK List of LISTS >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 返事がかかってなれば、メールでお知らせします。