일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Algorithm
- For
- IAC
- C++
- g1gc
- JPA
- jvm
- 연산자
- datastructure
- quicksort
- While
- 자료형
- ansible
- programmers
- MergeSort
- datatype
- Spring Security
- lambda
- UserDetails
- If
- Java
- Sprint Security
- zgc
- Class
- 기초
- redis
- Fluent-bit
- Kotlin
- SpringBoot Initializr
- JavaScript
- Today
- Total
뭐라도 끄적이는 BLOG
Redis 소개 및 데이터 타입 본문
Redis (Remote Dictionary Server)
Redis는 아래 3가지 용도로 주로 사용된다.
- Storage: 데이터 저장소의 역할을 한다.
- Database: DBMS의 역할을 수행할 수도 있다.
- Middleware: 어플리케이션이 이용할 수 잇는 유용한 기능을 제공한다.
In Memory DB이기 때문에 빠르게 데이터를 저장및 읽을 수 있다. 하지만 휘발성이기 때문에 중요한 데이터를 저장하기 보단 Session과 같은 단기적인 데이터 또는 Cache로 사용하여 빠르게 데이터를 불러오는데 사용한다. 어느정도 영속성도 확보할 수 있긴 하지만 절대적인 무결성을 위해서는 데이터베이스를 이용하는 것이 맞다.
Redis는 Key-Value 저장서로 List, Hash, Set, 정렬된 Set등 여러 형식의 자료구조를 지원하는 NoSQL이다. Redis같은 유연한 자료구조를 가지는 In Memory Key-Value 솔루션을 사용하여 DB부하를 분산시키는 데 적용을 하는 경우가 많다.
DataType
String
명령어 | 기능 | 예제 |
SET | 특정 키에 문자열 값을 저장 | SET say hello |
GET | 특정 키의 문자열 값을 가지고 온다. | GET say |
INCR | 특정 키의 값을 Integer로 취급하여 1 증가 | INCR count |
DECR | 특정 키의 값을 Integer로 취급하여 1 감소 | DECR count |
MSET | 여러 키에 대한 값을 한번에 저장 | MSET key1 value1 key2 value2 |
MGET | 키에 대한 값을 한번에 가지고 온다. | MGET key1 key2 |
List
Linked-list 형태의 자료구조이다. Queue와 Stack으로 사용할 수 있다.
명령어 | 기능 | 예제 |
LPUSH | 리스트의 왼쪽에 새로운 값을 추가 | LPUTH list apple |
RPUSH | 리스트의 오른쪽에 새로운 값을 추가 | RPUSH list banana |
LLEN | 리스트에 들어있는 아이템 개수를 반환 | LLEN list |
LRANGE | 특정 범위를 반환 | LRANGE list 0 -1 |
LPOP | 리스트의 왼쪽에서 값을 삭제하고 반환 | LPOP list |
RPOP | 리스트의 오른쪽에서 값을 삭제하고 반환 | RPOP list |
LRANGE 에서 범위는 0띄우고 -1으로 표현되는 점만 주의하면 된다.
Set
순서가 없는 유니크한 값. 검색이 빠르다. 수학의 집합 개념이다.
명령어 | 기능 | 예제 |
SADD | Set에 데이터를 추가 | SADD set apple |
SREM | Set에 데이터를 삭제 | SREM set apple |
SCARD | Set에 저장된 아이템 개수 반환 | SCARD set |
SMEMBERS | Set에 저장된 아이템들 반환 | SMEMBERS set |
SISMEMBER | 특정 값이 Set에 포함되어 있는지 반환 | SISMEMBER set apple |
Hashes
하나의 key 하위에 여러 field-value 쌍을 저장한다.
명령어 | 기능 | 예제 |
HSET | 한개 또는 다수의 필드에 값을 저장 | HSET user1 name bear age 10 |
HGET | 특정 필드의 값을 반환 | HGET user1 name |
HMGET | 한개 이상의 필드 값을 반환 | HMGET user1 name age |
HINCRBY | 특정 필드의 값을 Integer로 취급하여 지정한 숫자를 증가 | HINCRBY user1 viewcount 1 |
HDEL | 한개 이상의 필드를 삭제 | HDEL user1 name age |
Sorted Set
Set과 유사하게 유니크한 값의 집합이다. 각 값은 연관된 score를 가지고 정렬된다. 정렬된 상태이기에 빠르게 최소/최대값을 구할 수 있다. 순위 계산, 리더보드 구현등에 사용할 수 있다.
명령어 | 기능 | 예제 |
ZADD | 한개 또는 다수의 값을 추가 또는 업데이트 | ZADD rank 10 apple 20 banana |
ZRANGE | 특정 범위의 값을 반환 (오름차순 기준) | ZRANGE rank 0 1 |
ZRANK | 특정 값의 위치(순위)를 반환(오름차순 기준) | ZRANK rank apple |
ZREVRANK | 특정 값의 위치(순위)를 반환(내림차순 기준) | ZREVRANK rank apple |
ZREM | 한개 이상의 값을 삭제 | ZREM rank apple |
Bitmaps
비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장한다. 하나의 비트맵이 가지는 공간은 4294967295로 효율적으로 저장할 수 있다. 각 비트를 논리 연산으로 사용해 볼 수 있다.
명령어 | 기능 | 예제 |
SETBIT | 비트맵의 특정 오프셋에 값을 변경 | SETBIT visit 10 1 |
GETBIT | 비트맵의 특정 오프셋의 값을 반환 | GETBIT visit 10 |
BITCOUNT | 비트맵에서 set(1) 상태인 비트의 개수를 반환 | BITCOUNT visit |
BITOP | 비트맵들간의 비트 연산을 수행하고 결과를 비트맵에 저장 | BITOP AND result today yesterday |
각 비트의 초기 값은 0으로 아무런 설정을 하지 않았을때 GETBIT로 불러오면 0이 반환된다.
127.0.0.1:6379> setbit today_visit 2 1
(integer) 0
127.0.0.1:6379> setbit today_visit 3 1
(integer) 0
127.0.0.1:6379> setbit today_visit 4 1
(integer) 0
127.0.0.1:6379> bitcount today_visit
(integer) 3
127.0.0.1:6379> setbit yesterday_visit 3 1
(integer) 0
127.0.0.1:6379> setbit yesterday_visit 2 1
(integer) 0
127.0.0.1:6379> bitop and result yesterday_visit today_visit
(integer) 1
127.0.0.1:6379> bitcount result
(integer) 2
위는 사용 예시이다. BITOP으로 나온 결과물 result는 yesterday_visit의 3,2와 today_visit 3,2가 and 연산으로 나온 결과물이다.
HyperLogLog
유니크한 값의 개수를 효율적으로 얻을 수 있다. 확률적 자료구조로 오차가 있고 매우 큰데이터를 다룰 때 사용한다. 2^64개의 유니크 값을 계산할 수 있다. 저렇게 큰 값을 계산할 수 있는데 단 12KB까지 메모리를 사용하며 0.81%의 오차율을 허용한다.
대규모 데이터의 경우 100%정확한 값을 받아오는 것보다 99%정도의 값만으로도 처리하는데 충분한 경우가 있기 때문에 사용한다.
명령어 | 기능 | 예제 |
PFADD | HyperLogLog에 값들을 추가 | PFADD visit Jay Peter Jane |
PFCOUNT | HyperLogLog에 입력된 값들의 cardinality(유일값의 수)를 반환 | PFCOUNT visit |
PFMERGE | 다수의 HyperLogLog를 병합 | PFMERGE result visit1 visit2 |
이 외에도 Streams, geospatial, Bitfields 데이터 타입이 있다.
모든 키 검색과 삭제
위 데이터 타입들을 테스트 해보고 모든 키를 검색과 삭제하고 싶다면 아래 두가지 커맨드로 해결할 수 있다.
keys *
flushall
참고자료
'DataBase > Redis' 카테고리의 다른 글
Spring Boot에서 Redis 사용하기 (0) | 2023.07.24 |
---|