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"
'Redis' 카테고리의 다른 글
[펌] fork와 Redis 클라우드 (0) | 2016.01.25 |
---|---|
[Redis] 레디스 테스트후, 메모리 측정하기 (redis used memory) (0) | 2016.01.23 |
[redis] MIGRATE 커맨드 (0) | 2016.01.15 |
[redis] PERSIST 커맨드 (0) | 2016.01.14 |
[redis] SET key value [EX seconds|PX milliseconds] [NX|XX] (0) | 2016.01.14 |