Redis란?

Seok·2021년 4월 13일
0
post-thumbnail

Redis란?

Redis는 in-memory 데이터 베이스 혹은 데이터 구조 서버라고도 한다. Redis는 TCP Socket과 간단한 프로토콜을 가진 서버-클라이언드 모델을 사용하여 전송되는 명령을 통해 가변 데이터 구조에 대한 접근을 제공한다.
기본적으로 메모리에 데이터를 저장하여 다른 데이터 베이스에 비해 빠른 속도로 저장/접근할 수 있으며 단순한 Key/Value 방식의 저장이 아닌 다양한 자료구조를 제공한다.
메모리에 데이터를 저장하다보니 휘발성에대한 고려를 해야하는데 redis는 데이터를 영구적으로 저장할 수 있으며, 여러서버에서 같은 데이터를 사용할 수 있도록 Pub/Sub 구조를 제공하고 클러스터 구성도 제공한다.


자료구조(Collections) 사용법

Redis의 강점 중 하나는 자료구조들을 제공한다는 것이다. 그리고 이 자료구조들은 Atomic하기 때문에 Race condition 문제를 피할 수 있다.
Expires 옵션으로 그 시간 후에 해당 자료구조를 지운다.(아이템 단위가 아니다)

Strings

일반적인 문자열로 512MB까지 지원하며 Binary safe라고 표현하는데, 이진 시퀀스나 JPEG같은 파일도 저장할 수 있으며, 빈 문자열로 key로 사용 가능하다.

사용법

SET <KEY> <VALUE>
GET <KEY>

List

데이터베이스는 많은 저장 연산을 최대한 빠르게 처리해야하므로 Linked Lists를 선택했다고 한다.
그래서 head나 tail에추가 연산이 상수만에 가능하다.

유저들이 게시글을 작성할때 ID를 list에 push하고 사용자들이 방문할때 LRANGE 0 9명령을 통해 최신 10개의 게시글을 보여주는 방법으로 사용할 수 있다.

사용법

LPUSH <KEY> <VALUE>	// Left(head)에 푸시
RPUSH <KEY> <VALUE>	// Right(tail)에 푸시

LPOP <KEY>		//Left(head) POP
RPOP <KEY>		//Right(tail) POP

Set

정렬되지 않은 스트링 집합으로 값이 이미 존재하는지 혹은 서로다른 set 끼리의 intersection, union, 차이를 출력하는등의 기능을 제공한다.

사용법

SADD <KEY> <VALUE>		//set에 원소 추가

SMEMBERS <KEY>			//set 원소 모두 출력

SISMEMBER <KEY> <VALVUE>	//존재한다면 1 없으면 0

Sorted sets

set과는 다르게 score를 줄 수 있고, score 값을 기준으로 정렬이 가능하다.

사용법

ZADD <KEY> <SCORE> <VALUE>		// Sorted set에 원소 추가

ZRANGE <KEY> <STARTINDEX> <ENDINDEX>	 // startIndex~endIndex 값 반환

Hash

Key안에 SubKey-SubValue가 들어가있는 형태이다.

사용법

HMSET <KEY> <SUBKEY1> <SUBVALUE1> <SUBKEY2> <SUBVALUE2>		// 원소 추가

HGET <KEY> <SUBKEY1>						// SUBVLAUE1 반환

HMGET <KEY> <SUBKEY1> <SUBKEY2> 				// SUBVALUE1 SUBVALUE2 반환

📌주의사항

메모리관리

인메모리 데이터베이스이다 보니까 메모리 관리다 당연히 중요하다. Physical Memory이상을 사용하면 디스크에 Swap되므로 Page접근시 마다 시간이 늦어진다.

O(N) 명령어를 주의하자

Redis는 싱글쓰레드다. 따라서 O(N)의 작업이 실행되고있으면 다음 명령들은 계속 기다리고있어야한다.


출처

Redis.io data type Document
우아한레디스 by 강대명님

profile
🦉🦉🦉🦉🦉

0개의 댓글