Redis란 무엇일까?
-> Redis(REmote Dictionary Server)
보통 데이터베이스는 데이터를 하드 디스크나 SSD에 저장한다. 하지만 Redis는 데이터를 메모리(RAM)에 저장하는 인메모리 데이터베이스(In-Memory)로서 디스크 스캐닝이 필요없어 매우 빠른 장점이 존재한다.
이 말만 들으면 Redis의 가장 큰 특징이 모든 데이터를 메모리에 저장하는 빠른 DB가 다라고 생각할지도 모른다.
하지만, 빠른 성능은 Redis의 특징 중 일부분이고, 다른 인메모리 데이터베이스들과의 가장 큰 차이점은
"다양한 자료구조" 이다. 데이터 구조는 key/value 값으로 이루어져있다.
Value가 될 수 있는 데이터의 형식은 5가지이다.
- String (text, binary data) - 512MB까지 저장이 가능함
- Set (String 집합)
- Sorted set (set을 정렬해둔 상태)
- Hash
- List (양방향 연결리스트도 가능)
예를 들어.. 어떤 데이터를 정렬해야하는 상황이 있을 때,
→ DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다.
하지만 이 때 인메모리 데이터베이스인 Redis를 이용하고 Redis에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
Redis는 고성능 키-값 저장소로서 문자열, 리스트, 해시, 셋, 정렬된 셋 형식의 데이터를 지원하는 NoSQL이다.
Redis 간단한 실습
brew install redis (Mac Redis 설치)
redis-server (Redis Server 실행)
redis-cli (Redis Client 접속)
brew services start redis (Redis 서비스 실행)
flushAll (Redis 모든 Key 삭제)
Set 명령어
- set key value 의 문법으로 작성한다. ex) set key "hello" (key-value를 저장할 때 사용)
- get key(key에 저장된 value를 꺼낼 때 사용)
Append 명령어
- append는 key1 value 뒤에 문자열을 추가할 수 있게 해준다.
Sadd/Smembers 명령어 (Set)
- sadd 명령어를 통해서 Set 자료구조를 저장할 수 있다.
- smembers 명령어를 통해서 Set 자료구조를 출력한다. (순서가 뒤죽박죽으로 나오는 것을 알 수 있다.)
Zadd/Zrange 명령어 (Sorted Set)
- zadd 명령어를 통해서 가중치-값으로 지정한다.
- zrange 명령어를 통해서 출력 범위를 지정할 수 있다. (-1 이면 뒤에서 부터 시작)
Hset/HgetAll 명령어 (HashMap)
Redis 영속성
Redis는 데이터를 메모리에 저장하므로 Redis가 내려가면 메모리 상에 있던 데이터는 모두 유실된다.
따라서, 이를 막기위한 백업 과정이 존재한다.
Redis는 지속성을 보장하기 위해 데이터를 디스크에 저장할 수 있다. 서버가 내려가더라도 디스크에 저장된 데이터를 읽어서 메모리에 로딩한다.
데이터를 디스크에 저장하는 방식은 크게 두 가지 방식이 있다.
- RDB(Snapshotting) 방식 : 특정 지점을 설정하고 순간적으로 메모리에 있는 내용을 디스크에 백업하는 방식
- AOF(Append On File) 방식 : 명령(쿼리)들을 저장해두고 (write/update 연산 자체를 모두 로그파일에 기록하고) 서버가 셧다운되면 재실행하는 방식
'CS 공부 > 데이터베이스' 카테고리의 다른 글
이상현상 (Anomaly) (0) | 2022.07.16 |
---|---|
SQL과 NOSQL의 차이 (0) | 2022.07.10 |
댓글