= Redis(Remote Dictionary Server)란?
key-value 기반의 저장소로써 다양한 자료구조를 지원하는 NoSQL이다. Message Queue, Shared Memory, Remote Dictionary 용도로 사용된다. 특히, Remote Dictionary로써 RDBMS의 캐시 솔루션으로 사용 용도가 굉장히 높다.
= Redis의 특징
1] 빠른 읽기 쓰기 속도: 메모리 기반으로 동작을 수행함으로써 HDD, SSD 등의 저장장치(Disk)를 거치지 않기 때문에 I/O가 Disk를 거쳐가는 RDMS보다 성능이 좋다.
2] key-value 저장: 레디스에 쉽고 편하게 읽고 쓸 수 있다.
3] 다양한 데이터 타입 지원: 아래 자료구조와 같이 다양한 형태로 데이터를 저장할 수 있다.
4] Persistence(영속성) 지원: snapshot, AOF(Append Only File)방식을 통하여 disk에 저장이 가능하며, 서비스 장애가 발생하였거나 restart 하더라도 다시 데이터를 복구할 수 있다.
(!) Redis는 메모리기반이기 때문에 프로세스가 죽거나 ShutDown되면 엔진이 종료되고 메모리가 회수될 때 데이터가 증발해버리기 때문이다.
Redis 자료구조
Redis는 관계형 데이터베이스가 아니기 때문에, 데이터 타입(VARCHAR, INT, DATETIME 등)을 지원하지 않으며 ,아래의 자료구조 타입을 지원한다.
자료구조 | 설명 |
Strings | 문자(String), Binary 유형 데이터를 저장 |
Lists | 하나의 Key에 여러 개의 배열 값을 저장 |
Sets | 정렬순서가 없는 String타입 |
Hashes | 하나의 Key에 여러 개의 Field와 Value로 구성된 테이블을 저장 |
Sorted Sets | Set과 Hash가 결합 |
Bits | 0과 1로 표현하는 데이터 타입 |
HyperLogLogs | Element 중에서 Unique한 개수의 Element만 계산 |
Geo | 좌표 데이터를 저장 및 관리하는 데이터 타입 |
기본 명령어(cli) 정리
명령어 | 행동 | 사용 예시 |
get | 저장된 데이터 검색 | get test >> "안녕하세요" |
set | 데이터 저장 (binary 데이터 저장가능) | set test "안녕하세요" |
mset / mget | 여러 개의 key와 value를 한 번 저장하고 검색 | |
hget | Hash로 저장된 값의 필드 1개 조회 | hget test list1 >> "list first" |
hset | Hash 형태로 필드값 1개를 저장 | hset test list "list first" |
hmget | Hash로 저장된 값의 필드 여러개를 조회 | hmget test list1 list2 >> 1) "list first" 2) "list second" |
hmset | Hash 형태로 필드값 여러개를 저장 | hmset test list1 "list first" list2 "list second" |
lpush | List 구조체에 데이터를 넣어준다 (맨앞에 등록) | lpush listttest |
lrange | List 구조체의 데이터 리스트를 출력한다 | lrange listtest 0 -1 (-1이 입력되면, 전체목록) |
lpop | List 구조체의 데이터 리스트중 1개를 제거 (맨앞 데이터, 후입선출) | lpop listtest |
hdel | Hash 지정된 Key필드를 삭제 (del 명령어도 가능 (del] [key] [hashkey])) |
hdel test list2 |
del | 저장된 데이터 삭제 | del test |
rename | 저장된 데이터 값 변경 (rename [기존 key] [변경 key]) |
rename test1 goodtest |
randomkey | 저장된 key중에 하나의 key를 랜덤하게 검색 | randomkey >>> test3 (아무거나 랜덤하게 나옴..) |
keys | 저장된 모든 key를 검색 | keys * (전체검색) keys *list* (해당 단어포함 검색) |
exists | 검색 대상 key가 존재하는지 여부를 확인 (integer) 1: 존재, 0: 존재하지않음 |
exists test >> (integer) 1 |
strlen | value의 길이 | |
flushall | 현재 저장되어 있는 모든 key 삭제 (조심해야하는 명령어) | 실제 운영환경에서는, 보통 권한이 잠겨있음 |
setex | 일정 시간 동안만 저장 (setex [key] [second(초)] [value]) |
|
ttl | 남은 시간 확인 (무제한인 경우, -1로 리턴, key가 없는경우, -2) | |
incr / incrby | value 1 증가 / value에 지정한 수만큼 감소 (데이터가 정수형태로 저장되어있는 경우) |
|
decr / decrby | value 1 감소 / value에 지정한 수만큼 감소 (데ㅣ터가 정수형태로 저장되어있는 경우) |
|
append | 현재 value에 추가 (변경이 아닌, 맨뒤에 붙음) |
|
into | Redis 서버 설정 상태 조회 |
더많은 명령어 확인
Redis - Spring 연동하기
'Etc' 카테고리의 다른 글
Etc - OS 업그레이드 후 개발 관련 도구 에러 (xcrun: error: invalid active developer path) 해결방법 (0) | 2022.04.19 |
---|---|
Etc - 쿠키(cookie)와 세션(session) (0) | 2022.03.13 |
python 문법정리 (0) | 2021.10.20 |
Etc - Mac OS Big Sur기준 로컬 Java프로젝트 구동시 지연현상 기록 (0) | 2021.10.08 |