본문 바로가기

Etc

Etc - Redis

= 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 서버 설정 상태 조회  

더많은 명령어 확인

 

STRINGS Introduction Redis

strings_intro STRINGS Intro key-value Strings는 key와 value가 일 대 일 관계입니다. 반면 Lists, Sets, Sorted Sets, Hashes는 일 대 다 관계입니다. Key/Value Data type: Binary-safe strings 바이너리-안전 문자열은 알파벳, 숫

redisgate.kr

Redis - Spring 연동하기

 

Spring - Redis 연동

Redis Java Client중 "Lettuce"를 사용하여 진행한다. 의존성 추가 compile 'org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE' // Redis Redis 외부설정 Properties (application.yml) 변..

xggames.tistory.com