redis 서버 실행시 ziplist 관련 설정을 커맨드 라인에 옵션을 통해서 변경가능하다.


$ redis-server --hash-max-ziplist-entries 5 --hash-max-ziplist-value 5 


$ redis-server --list-max-ziplist-entries 5 --list-max-ziplist-value 5 


$ redis-server --set-max-intset-entries 5


$ redis-server  --zset-max-ziplist-entries 5 --zset-max-ziplist-value 5





* 이제 테스트를 위해서 ziplist 관련 entry 또는 value 값을 모두 5로 낮춘다.


$ redis-server --hash-max-ziplist-entries 5 --hash-max-ziplist-value 5  --list-max-ziplist-entries 5 --list-max-ziplist-value 5  --set-max-intset-entries 5 --set-max-intset-entries 5 --zset-max-ziplist-entries 5 --zset-max-ziplist-value 5






* String 데이터 타입 

int : 64 비트 signed integer를 표현할 때

embstr : 40 바이트보다 작은 문자열을 표현할 때

raw : 40 바이트보다 큰 문자열을 포함할 때


테스트 코드
127.0.0.1:6379> SET s1 1
OK
127.0.0.1:6379> OBJECT ENCODING s1
"int"
127.0.0.1:6379> SET s2 "abc"
OK
127.0.0.1:6379>  OBJECT ENCODING s2
"embstr"
127.0.0.1:6379> SET s3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
OK
127.0.0.1:6379>  OBJECT ENCODING s3
"raw"


* List
ziplist: List 크기가 list-max-ziplist-entries 값(5) 보다 작고, 각 List 값이 list-max-ziplist-value(5 바이트)보다 적은 바이트를 사용할 때
linkedlist: List 크기가 list-max-ziplist-entries 값(5)보다 크거나, 각 List  list-max-ziplist-value(5바이트)보다 클 때.


127.0.0.1:6379> LPUSH l1 a b
(integer) 4
127.0.0.1:6379> OBJECT ENCODING l1
"ziplist"
127.0.0.1:6379> LPUSH l2 a b c d e f g
(integer) 9
127.0.0.1:6379> OBJECT ENCODING l2
"linkedlist"
127.0.0.1:6379> LPUSH l3 "test test test"
(integer) 2
127.0.0.1:6379> OBJECT ENCODING l3
"linkedlist"
127.0.0.1:6379> LPUSH l4 "t"
(integer) 1
127.0.0.1:6379> OBJECT ENCODING l4
"ziplist"



* Set
intset: Set의 모든 요소가 integer이고, Set 개수가 set-max-intset-entries 설정보다 작을 때
hashtable: Set의 하나의 요소라도 integer가 아니거나, Set 개수가 set-max-intset-entries 설정보다 클 때

127.0.0.1:6379> SADD s1 1 2
(integer) 2
127.0.0.1:6379> OBJECT ENCODING s1
"intset"
127.0.0.1:6379> SADD s2 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> OBJECT ENCODING s2
"hashtable"
127.0.0.1:6379> SADD s3 a b c
(integer) 3
127.0.0.1:6379> OBJECT ENCODING s3
"hashtable"



* Hash
ziplist: Hash의 필드 개수가 hash-max-ziplist-entries(5)보다 크지 않고, Hash의 각 필드 이름과 값이 hash-max-ziplist-value(5바이트)보다 작을 때
hashtable: Hash 크기 또는 Hash의 값이 각각 hash-max-ziplist-entries와 hash-max-ziplist-value보다 클 때


127.0.0.1:6379> HMSET h1 a 1 b 2
OK
127.0.0.1:6379> OBJECT ENCODING h1
"ziplist"
127.0.0.1:6379> HMSET h2 a 1 b 2 c 3 d 4 e 5 f 6
OK


* Sorted Set
ziplist: Sorted Set의 개수가 set-max-ziplist-entries 설정보다 작고, Sorted Set의 엘리먼트 값이 모두 zset-max-ziplist-value(5바이트) 설정보다 작을 때
skiplist와 hashtable : Sorted Set 개수 또는 Sorted Set의 개별 값이 set-max-ziplist-entries와 zset-max-ziplist-value(5바이트) 설정보다 클 때

127.0.0.1:6379>  ZADD z1 1 a
(integer) 1
127.0.0.1:6379> OBJECT ENCODING z1
"ziplist"
127.0.0.1:6379> ZADD z2 1 asdfasdfasfasdf
(integer) 1
127.0.0.1:6379> OBJECT ENCODING z2
"skiplist"








Posted by '김용환'
,