Opensource redis data type 종류 2016 · 07 · 27
3 min read
페이퍼 Edit ↗ 목차 Redis Data Type 요약 인터넷상에 수많은 좋은 자료가 있음에도 공부 차원에서 정리를 한다
테스트는 redis-cli를 이용해서 하지만 실제 사용은 언어에 맞는 api library를 사용 할듯
개요 http://redis.io/topics/data-types-intro
예제 http://redis.io/topics/data-types
Strings value에 문자 숫자 등을 저장한다 저장시 별도로 형이 없다 (숫자 문자 구분이 없음) 숫자도 저장가능 하다 그리고 숫자에 incr, incrby, decr, decrby 같은 atomic counter 연산이 가능 incrby, decrby 는 특정 수를 더하거나 뺄때 사용 incrby "test_strings" 10 처럼 사용 1
2
3
4
5
6
7
8
9
10
# redis-cli
127.0.0.1:6379> set "test_strings" 1
OK
127.0.0.1:6379> get "test_strings"
"1"
127.0.0.1:6379> incr "test_strings"
( integer) 2
127.0.0.1:6379> get "test_strings"
"2"
127.0.0.1:6379>
Lists value에 list를 저장한다 lrange: 값을 조회 이때 -1은 모두 가져오라는 뜻 1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> lpush "test_lists" 1
127.0.0.1:6379> lpush test_lists 2
127.0.0.1:6379> lrange test_lists 0 -1
1) "2"
2) "1"
127.0.0.1:6379> rpush test_lists 3
( integer) 3
127.0.0.1:6379> lrange test_lists 0 -1
1) "2"
2) "1"
3) "3"
rpop를 이용하여 queue 구현이 가능할꺼 같다1
2
3
4
5
127.0.0.1:6379> rpop test_lists
"3"
127.0.0.1:6379> lrange test_lists 0 -1
1) "2"
2) "1"
rbpop을 이용하면 순차적인 분산 작업도 구현 가능할꺼 같다 rpop과 비슷하나 데이타가 없다면 데이타가 들어올때까지 block 상태로 대기한다Sets value을 set형태로 가지고 있음 list는 중복이 되나 set은 중복이 안됨 1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> sadd test_sets 1
( integer) 1
127.0.0.1:6379> smembers test_sets
1) "1"
127.0.0.1:6379> sadd test_sets 1 2 3 4
( integer) 3
127.0.0.1:6379> smembers test_sets
1) "1"
2) "2"
3) "3"
4) "4"
Hashes Hashs key/value 목록을 값으로 가진다 1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> hset htest username hi
( integer) 1
127.0.0.1:6379> hset htest userpwd asdf
( integer) 1
127.0.0.1:6379> hget htest username
"hi"
127.0.0.1:6379> hgetall htest
1) "username"
2) "hi"
3) "userpwd"
4) "asdf"
1
2
127.0.0.1:6379> hget htest temp
( nil)
1
2
3
4
5
6
127.0.0.1:6379> hget htest userpwd
"asdf"
127.0.0.1:6379> hset htest userpwd 1234
( integer) 0
127.0.0.1:6379> hget htest userpwd
"1234"
Sorted sets value를 set형태로 가지고 있음 Sets과 마찬가지로 중복은 안됨score와 함께 저장되며 score를 기준으로 정렬됨 list처럼 사용이 될꺼 같으나 정렬된다는 장점이 있는 것 같다 1
2
3
4
5
6
7
127.0.0.1:6379> zadd test_ssets 1 1
( integer) 1
127.0.0.1:6379> zadd test_ssets 2 2
( integer) 1
127.0.0.1:6379> zrange test_ssets 0 -1
1) "1"
2) "2"
1
2
127.0.0.1:6379> zadd test_ssets "a" 2
( error) ERR value is not a valid float
중복이 안되면 동일한 value를 넣으면 기존 데이타의 score를 덮어서 데이타 순서가 바뀐다 1
2
3
4
5
127.0.0.1:6379> zadd test_ssets "0" 2
( integer) 0
127.0.0.1:6379> zrange test_ssets 0 -1
1) "2"
2) "1"
Bitmaps bit값을 저장해준다 512MB 용량으로 2^32(42억)개의 bit값들을 저장할 수 있다 boolean 옵션값을 저장하는 용도로 사용하면 좋을거 같다 (회원마다 공지 조회여부 등) 1
2
3
4
5
6
7
8
127.0.0.1:6379> setbit test_bits 0 1
( integer) 0
127.0.0.1:6379> getbit test_bits 0
( integer) 1
127.0.0.1:6379> setbit test_bits 0 0
( integer) 1
127.0.0.1:6379> getbit test_bits 0
( integer) 0