Redis란?
정의
- Remote Dictionary Server
 
- Storage: 데이터 저장소 (데이터)
 
- Database: 전통적인 DBMS (영속성)
 
- Middleware: 어플리케이션이 Redis를 이용한다.
 
In-memory DB
- 데이터를 디스크가 아닌 RAM에 저장한다.
 
- 빠른 속도.
 
빠른 속도와 휘발성의 트레이드 오프를 고려해야 한다.
캐싱, 세션 등
Key-Value 저장소
- Java의 
Map 과 같은 형식 
- Hash를 이용하기 때문에 빠르다.
 
- 범위 검색 불가.
 
Redis 자료구조
String
- 바이트 배열 저장 (바이너리로 변환할 수 있는 모든 데이터를 저장 가능)
 
- 최대 크기는 512MB
 
127.0.0.1:6379> SET HELLO WORLD
OK
127.0.0.1:6379> GET HELLO
"WORLD"
| 명령어 | 
기능 | 
| SET | 
특정 키에 문자열 값 저장 | 
| GET | 
특정 키의 문자열 값을 얻어온다. | 
| INCR | 
특정 키의 값을 1 증가 | 
| DECR | 
특정 키의 값을 1 감소 | 
| MSET | 
여러 키의 값을 한번에 저장 | 
| MGET | 
여러 키에 대한 값을 한 번에 얻어온다 | 
List
- 키에 대한 값을 List로 관리한다.
 
LinkedList 형태의 자료구조 
Queue, Stack으로 사용 가능 
| 명령어 | 
기능 | 
| LPUSH | 
리스트 왼쪽(head)에 값 추가 | 
| RPUSH | 
리스트 오른쪽(tail)에 값 추가 | 
| LLEN | 
리스트에 들어있는 요소 개수 반환 | 
| LRANGE | 
리스트 특정 범위 반환 (zero base) | 
| LPOP | 
리스트 왼쪽(head)에서 값을 반환 후 삭제 | 
| RPOP | 
리스트의 오른쪽(tail)에서 값을 반환 후 삭제 | 
127.0.0.1:6379> lpush list 1
(integer) 1
127.0.0.1:6379> lpush list 2
(integer) 2
127.0.0.1:6379> rpush list 0
(integer) 3
127.0.0.1:6379> llen list
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> lrange list 0 2
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> lpop list
"2"
Set
- 순서가 없는 단일 값의 집합
 
- 검색이 빠르다.
 
- 집합 연산이 가능
 
| 명령어 | 
기능 | 
| SADD | 
Set에 데이터 추가 | 
| SREM | 
Set에 데이터 삭제 | 
| SCARD | 
Set에 저장된 아이템 개수 반환 | 
| SMEMBERS | 
Set에 저장된 아이템 반환 | 
| SISMEMBER | 
특정 값이 Set에 포함되어 1(있음) / 0(없음) 반환 | 
127.0.0.1:6379> sadd set 1
(integer) 1
127.0.0.1:6379> sadd set 2
(integer) 1
127.0.0.1:6379> scard set
(integer) 2
127.0.0.1:6379> smembers set
1) "1"
2) "2"
127.0.0.1:6379> sismember set 1
(integer) 1
127.0.0.1:6379> sismember set 3
(integer) 0
127.0.0.1:6379> sismember set 2
(integer) 1
127.0.0.1:6379> srem set 2
(integer) 1
127.0.0.1:6379> smembers set
1) "1"
Hashes
- 하나의 키 하위에 여러개의 field-value 쌍 저장
 
- 여러 필드를 가진 객체를 저장한다고 볼 수 있다.
 
| 명령어 | 
기능 | 
| HKEYS | 
키에 저장된 필드를 반환 | 
| HSET | 
한 개 또는 다수의 필드에 값을 저장 | 
| HGET | 
특정 필드의 값을 반환 | 
| HMGET | 
한 개 이상의 필드 값을 반환 | 
| HINCRBY | 
특정 필드의 값을 지정한 값 만큼 증가 (integer일 경우) | 
| HDEL | 
한 개 이상의 필드 삭제 | 
127.0.0.1:6379> hset key hashkey1 value1 hashkey2 value2
(integer) 2
127.0.0.1:6379> hget key hashkey1
"value1"
127.0.0.1:6379> hset key intkey 1
(integer) 1
127.0.0.1:6379> hmget key hashkey1 hashkey2
1) "value1"
2) "value2"
127.0.0.1:6379> hincrby key intkey 1
(integer) 2
127.0.0.1:6379> hincrby key intkey 2
(integer) 4
127.0.0.1:6379> hdel key hashkey2
(integer) 1
127.0.0.1:6379> hkeys key
1) "hashkey1"
2) "intkey"
Sorted Sets
- 각 값은 socre를 기준으로 정렬되어 있음
 
- 순위계산 / 리더보드 등에 사용됨
 
| 명령어 | 
기능 | 
| ZADD | 
한 개 또는 다수의 값을 추가 또는 업데이트 | 
| ZRANGE | 
특정 범위의 값을 반환 | 
| ZRANK | 
특정 값의 순위 반환 (오름차순) | 
| ZREVRANK | 
특정 값의 순위 반환 (내림차순) | 
| ZREM | 
한 개 이상의 값 삭제 | 
127.0.0.1:6379> zadd rank 1 rank1 2 rank2
(integer) 2
127.0.0.1:6379> zrange rank 0 1
1) "rank1"
2) "rank2"
127.0.0.1:6379> zrank rank rank1
(integer) 0
127.0.0.1:6379> zrevrank rank rank1
(integer) 1
127.0.0.1:6379> zrem rank rank1
(integer) 1
127.0.0.1:6379> zrange rank 0 1
1) "rank2"
| 명령어 | 
기능 | 
| PFADD | 
HyperLogLog에 값 추가 | 
| PFCOUNT | 
HyperLogLog에 입력된 유니크 값의 개수 반환 | 
| PFMERGE | 
다수의 HyperLogLog를 병합 | 
Bitmaps
- 비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장
 
- 하나의 비트맵이 가지는 공간은 232 - 1
 
- 비트 연산 가능
 
| 명령어 | 
기능 | 
| SETBIT | 
비트맵의 특정 오프셋에 값을 변경 | 
| GETBIT | 
비트맵의 특정 오프셋의 값을 반환 | 
| BITCOUNT | 
비트맵에서 1인 상태의 비트의 개수를 반환 | 
| BITOP | 
비트맵들 간의 비트연산을 수행 후 결과를 비트맵에 저장 | 
127.0.0.1:6379> clear
127.0.0.1:6379> setbit key 0 1
(integer) 0
127.0.0.1:6379> setbit key 5 1
(integer) 0
127.0.0.1:6379> set bit key 8 0
(error) ERR syntax error
127.0.0.1:6379> setbit key 8 0
(integer) 0
127.0.0.1:6379> setbit key 10 1
(integer) 0
127.0.0.1:6379> getbit key 10
(integer) 1
127.0.0.1:6379> bitcount key
(integer) 3
127.0.0.1:6379> setbit key2 0 1
(integer) 0
127.0.0.1:6379> setbit key2 5 1
(integer) 0
127.0.0.1:6379> bitop and key3 key key2
(integer) 2
127.0.0.1:6379> bitcount key3
(integer) 2
HyperLogLog
- 유니크한 값의 개수를 효율적으로 얻을 수 있다.
 
- 오차가 있고, 매우 큰 데이터를 다룰 때 사용
 
- 264개의 유니크 값을 계산 가능
 
- 최대 12KB 메모리 사용. 0.81% 오차
 
127.0.0.1:6379> pfadd today kim lee park
(integer) 1
127.0.0.1:6379> pfcount today
(integer) 3
127.0.0.1:6379> pfadd today kim
(integer) 0
127.0.0.1:6379> pfcount today
(integer) 3
127.0.0.1:6379> pfadd tommorrow kim park
(integer) 1
127.0.0.1:6379> pfcount tommorrow
(integer) 2
127.0.0.1:6379> pfmerge today tommorrow
OK
127.0.0.1:6379> pfcount today
(integer) 3
127.0.0.1:6379> pfadd tommorrow choi
(integer) 1
127.0.0.1:6379> pfmerge today tommorrow
OK
127.0.0.1:6379> pfcount today
(integer) 4
참고
 
            
댓글