internal_linkedlist
Redis LINKED List of LISTS
레디스 내부구조 교육 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
LINKED LIST Data Structure
Doubly Linked List
-
리스트에서 사용하는 양 항뱡 링크드 리스트 구조는 대부분 아는 데이터 구조이므로,
여기서는 전체적인 구조와 주요 function들을 살펴봅시다.
- LPUSH, LPOP은 앞(head)에서 동작하고,
- RPUSH, RPOP은 뒤(tail)에서 동작하고,
- LINSERT는 새 노드를 특정 노드 앞 또는 뒤에 넣고,
- LREM은 한 노드를 삭제하고,
- LTRIM은 여러 노드를 삭제한다.
아래 그림에서 보는 것처럼, 맨 앞(head) 노드와 맨 뒤(tail) 노드 그리고 노드 개수를 가지고 있는 리스트(list)가 있고, 각 노드는 포인터로 앞, 뒤로 연결되어 있고, 값을 가지고 있는 redisObject를 가리키는 포인터로 구성되어 있다.
다음은 이 데이터 구조와 리스트 function을 연결해서 어느 곳에서 동작하는지 알아보자. 주요 function 위주로 연결했다.
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 연결 관계
<< ZIP List of LISTS | LINKED List of LISTS | QUICK List of LISTS >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.