참고 : https://www.tutorialspoint.com/
Redis (REmote DIctionary Server)
확장 가능한 고성능 웹 웹 어플리케이션을 구축하기 위한 오픈소스의 키-값 저장소이자 적절한 솔루션
오픈소스로, 웹 사이트 데이터를 캐시해두는 데 주로 사용된다.
특징
- 레디스는 In-Memory 데이터베이스다. 즉, 모든 데이터를 메모리에 저장하고 조회한다. 기존 관계형 데이터베이스(Oracle, MySQL) 보다 훨씬 빠른데 그 이유는 메모리 접근이 디스크 접근보다 빠르기 때문이다
- 다른 키-값 저장소와 비교할 때 상대적으로 풍부한 데이터 세트 유형을 가지고 있고 ,데이터를 원하는 수의 슬레이브에 복제할 수 있다.
- 작업은 원자적이므로 두 클라이언트가 동시에 엑세스하는 경우 Redis 서버에 업데이트된 값을 수신한다.
- 다중 유틸리티 도구로 캐싱, 메시징 대기열, 웹과 같은 단기 데이터 사용에 적절하다 ( 세션, 조회수 등 )
- 트랜잭션 문제 해결 가능 : 싱글 스레드 동작 서버의 모든 자료구조는 원자성을 가지기 때문에, race condition을 피해 정확성을 보장하기 쉬움
- 즉 외부의 collections을 잘 이용하여 개발 시간 단축이 가능하고, 여러가지 문제를 줄여주는 것이 가능함
레디스 설치
- 우분투 환경 기준 -
// 레디스 설치 //
$sudo apt-get update
$sudo apt-get install redis-server
// 레디스 시작 //
$redis-server
//레디스 작동 확인 //
$redis-cli
redis 127.0.0.1:6379> ping
>> PONG
레디스 자료구조
[1] String : 키-값 형식으로 연결될 수 있는 가장 간단한 유형의 값이다. ( 최대 512MB )
- 모든 종류의 문자열을 저장할 수 있어 JPEG 이미지, HTML fragment를 캐시하는 용도로 자주 사용된다.
redis 127.0.0.1:6379> SET name "tutorialspoint"
OK
redis 127.0.0.1:6379> GET name
"tutorialspoint"
redis 127.0.0.1:6379> SET counter 100
OK
redis 127.0.0.1:6379> incr counter
(integer) 101
redis 127.0.0.1:6379> GETSET mycounter "0"
"1"
redis 127.0.0.1:6379> GET mycounter
"0"
[2] hash : 키-값 쌍의 모음으로, 문자열 필드와 문자열 값 간의 map으로 주로 객체를 나타내는데 사용된다.
- 키에 대한 필드 갯수의 제한은 없다.
- RDB의 테이블과 비슷하다 hash key=PK, field=column
redis 127.0.0.1:6379> HMSET user:1 username tutorialspoint password tutorialspoint points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "tutorialspoint"
3) "password"
4) "tutorialspoint"
5) "points"
6) "200"
[3] list : 단순하게 삽입 순서로 정렬된 문자열 목록이다, head 또는 tail에 요소를 추가할 수 있다.
- 목록의 최대 길이는 2^32 , 1개 요소(4294967295, 목록당 40억 개 이상의 요소 보유 가능)
redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
[4] Set : 정렬되지 않은 문자열 모음으로, Redis에서는 O(1) 시간 복잡도에서 추가, 제거 및 테스트할 수 있다.
- 성공과 실패를 0,1로 나타냄
- 같은 요소는 insert 될 수 없음.
redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist
1) "rabitmq"
2) "mongodb"
3) "redis"
[5] Sorted Set : Set과 유사하게 중복없는 멤버들을 저장하지만, 각각의 멤버는 스코어에 연결된다. ( sort가 필요한 데이터에 사용 )
- 모든 데이터는 socre에 의해 연결되고 정렬된다.
- 스코어가 같다면 멤버값의 사전순서로 정렬된다.
- 스코어의 정렬된 형태로 저장되기 때문에 인덱스를 이용하여 빠르게 조회할 수 잇어 조희 시간 단축이 가능하다.
redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"
반응형
'Tech Stack > Database ( TSDB, NOSQL, SQL )' 카테고리의 다른 글
InfluxDB CQ ( continuous query ) (0) | 2022.08.12 |
---|---|
Telegraf (0) | 2022.07.15 |
InfluxDB (1) | 2022.06.27 |
Redis Command (0) | 2022.04.04 |
정규화 (0) | 2022.03.10 |