Redis
Redis [ 2024-01-27 ]
Redis는 모든 데이터를 메모리에 저장하고 조회하는 데이터베이스입니다. 즉, In-Memory 방식의 데이터베이스입니다. 또한 Key-Value로 이루어진 다양한 형태의 자료구조를 제공합니다.
하지만 메모리에 직접적으로 저장하다보니, 서버가 꺼지면 데이터가 모두 손실된다는 큰 단점이 있습니다. 하지만, 백업 기능을 지원하므로 이를 활용하면 이런 단점을 해소할 수 있습니다.
그래서 주로 보조 데이터 저장소로 사용했지만, 이러한 기능들을 이용하여 주 데이터 저장소로 사용이 가능합니다.
메모리에 직접적으로 저장하기 때문에 빠른 처리 속도가 장점이고, Redis 내부에서 명령어를 처리하는 부분은 싱글 스레드 아키텍처로 구현되어 있어 멀티 스레드 아키텍처보다 구조가 단단하게 설계되어 여러 장점이 있습니다.
주로 캐싱, 세션 관리, 메시지 브로커, 실시간 분석 등 다양한 용도로 활용됩니다.
주요 특징
인메모리 데이터 저장
Redis는 주로 메모리에 데이터를 저장합니다.
이로 인해 RDB보다 더 빠른 데이터 엑세스가 가능하고, 서버가 꺼지면 데이터가 사라지는 것을 방지하기 위해 주기적으로 스냅샷을 저장하여 데이터의 지속성을 보장합니다.
다양한 데이터 구조 지원
Redis는 다양한 데이터 구조를 지원합니다.
주로 문자열, 리스트, 해시, 셋, 정렬 셋 등 다양한 자료구조를 지원합니다.
이로 인해 개발의 편의성이 좋아지고, 난이도가 낮아지는 장점이 있습니다.
고성능
Redis는 싱글 스레드 모델을 사용하여 매우 높은 성능을 제공합니다.
이는 여러 클라이언트 요청을 순차적으로 처리하여 병렬 처리와 동시성 문제를 피할 수 있습니다.
Redis는 이러한 특징을 가지고 있습니다.
Redis를 한 문장으로 요약하면
고성능 키 - 값 ( Key-Value ) 저장소로서, 문자열, 리스트, 해시, 셋 정렬된 셋 형식의 데이터를 지원하는 NoSQL이다
라고 표현할 수 있습니다.
Redis 영속성
위에서 서버가 꺼져도 스냅샷을 저장하여 데이터의 지속성을 보장한다고 특징을 말했습니다.
이 방식은 크게 두가지가 있습니다.
RDB( Snapshotting ) 방식
데이터베이스의 스냅샷을 디스크에 저장하는 방식입니다.
주기적으로 스냅샷을 생성하여 디스크에 저장하는데, 이 스냅샷은 Redis 데이터베이스의 특정 시점에서의 전체 상태를 포함하고 있습니다.
- 장점
- 스냅샷 방식이므로, 백업에 용이합니다.
- 비동기식으로 스냅샷을 생성하기 때문에 성능에 영향을 미치치 않습니다.
- 단점
- 스냅샷이 주기적으로 생성되기 때문에, 마지막 스냅샷 이후의 변경 내용은 손실될 수 있습니다.
- 스냅샷을 생성하는 동안 Redis는 일시적으로 차단될 수 있습니다.
AOF( Append On FIle ) 방식
Redis가 수행한 모든 쓰기 작업을 지속적으로 파일에 기록하는 방식입니다.
각 쓰기 명령의 내용을 저장하므로, Redis서버를 다시 시작할 때 마다 이 파일을 재실행하여 이전 상태로 복구할 수 있습니다.
- 장점
- 파일 크기가 상대적으로 작을 수 있습니다.
- 파일이 순차적으로 쓰여지기 때문에 디스크 I/O가 최적화 됩니다.
- 단점
- AOF파일이 커질수록 재실행 시간이 오래 걸릴 수 있습니다.
- RDB에 비해 파일이 더욱 많은 디스크 공간을 사용할 수 있습니다.
사용법 ( Windows )
WSL 설치
Windows Subsystem for Linux의 약자로, 윈도우에서 리눅스 환경처럼 Shell을 사용할 수 있게 해주며 Linux명령어를 이용할 수 있게 해줍니다.
WSL 설치
1
wsl --install
Redis 설치
1
2
3
4
5
6
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
설치가 끝난후,
위와 같은 shell창이 나오게 됩니다.
1
2
3
sudo service redis-server start //redis 서버 실행
sudo service redis-server stop // redis 서버 중단
sudo service redis-server restart // redis 서버 재시작
그리고 나서 shell창에 서버를 실행시키는 명령어를 입력하고,
1
redis-cli
위의 명령어를 입력하면 redis서버 로 이동하게 됩니다.
이러면 redis가 정상적으로 설치되고, redis 명령어를 사용할 수 있게 됩니다.
명령어
서버 정보 및 관리
- PING - 서버가 실행중인지 확인합니다.
- INFO - 서버의 정보를 반환합니다.
- CONFIG GET/SET - 서버 설정을 조회하거나 설정합니다.
- FLUSHDB - 현재 선택한 DB의 모든 데이터를 삭제합니다.
- FLUSHALL - 모든 DB의 데이터를 삭제합니다.
데이터 타입별 명령어
- String
- SET key value - 문자열 값을 저장합니다.
- GET key - 키에 해당하는 값을 가져옵니다.
- DEL key - 키와 연관된 값을 삭제합니다.
- List
- LPUSH key value1 [ value2 … ] - 리스트의 왼쪽에 값을 추가합니다.
- RPUSH key value1 [ value2 … ] - 리스트의 오른쪽에 값을 추가합니다.
- LRANGE key start stop - 리스트의 범위에 해당하는 값을 가져옵니다.
- Hash
- HSET key field value - 해시 필드에 값을 설정합니다.
- HGET key field - 해시 필드 값을 가져옵니다.
- HGETALL key - 해시의 모든 필드와 값을 가져옵니다.
- Set
- SADD key member1 [ member2 … ] - 셋에 멤버를 추가합니다.
- SMEMBERS key - 셋의 모든 멤버를 가져옵니다.
- SISMEMBER key member - 셋에 멤버가 있는지 확인합니다.
- Sorted Set
- ZADD key score1 member1 [ score2 member2 … ] - 정렬된 셋에 멤버를 추가합니다.
- ZRANGE key start stop [WITHSCORES] - 정렬된 셋의 범위에 해당하는 멤버를 가져옵니다.
- ZSCORE key member - 정렬된 셋에서 멤버의 점수를 가져옵니다.
키관리
- KEYS pattern - 패턴과 일치하는 모든 키를 가져옵니다.
- EXPIRE key seconds - 키의 만료 시간을 설정합니다.
- TTL key - 키의 남은 만료 시간을 조회합니다.
- RENAME key newkey - 키의 이름을 변경합니다.
Pub/Sub(메세지 브로커)
- SUBSCRIBE channel [channel2 … ] - 채널을 구독합니다.
- PUBLISH channel message - 채널로 메세지를 발행합니다.
트랜잭션
- NULTI - 트랜잭션을 시작합니다.
- EXEC - 트랜잭션을 실행합니다.
- DISCARD - 트랜잭션을 취소하고 초기 상태로 되돌립니다.
이 외에도 Redis에는 다양한 명령어가 있습니다.