주로 키-값(key-value) 데이터베이스로 사용되지만, 단순한 데이터 저장소 이상으로 다양한 데이터 구조를 지원한다. Redis는 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 속도를 제공하며, 캐싱, 세션 관리, 메시지 큐와 같은 다양한 사용 사례에서 널리 활용된다.
여기서 인메모리 (In - Memory)?!
- 컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용
- RAM에 데이터를 저장하게 되면 데이터를 저장/조회할 때 하드 디스크를 오고가는 과정을 거치지 않아도 되어 속도가 빠름
# Redis의 특징
1. Key, Value구조이기 때문에 쿼리를 사용할 필요가 없음
2.고정되지 않은 스키마를 가지므로 키마다 원하는 내용만 저장 가능
- 다양한 데이터 타입을 지원
String, List, Hash, Set, Sorted Set과 같은 다양한 자료구조를 지원
3. 대량의 데이터 처리: 빠른 응답 시간으로 인해 동시에 많은 양의 데이터 처리 가능
# Redis의 활용 방법
1. 캐싱(Caching): 레디스는 데이터 캐싱에 매우 적합한 데이터 저장소이다. 캐싱은 데이터베이스나 파일 시스템 등의 느린 데이터 저장소에 대한 엑세스를 줄이고, 더 빠른 데이터 엑세스를 위해 데이터를 메모리에 저장하는 것을 의미한다. 레디스를 이용한 캐싱은 웹 사이트나 애플리케이션에서 데이터베이스 쿼리 등의 불필요한 엑세스를 줄이고, 빠른 응답 속도를 제공할 수 있다.
2. 세션저장(Session Storage): 레디스는 세션 데이터 저장에 매우 적합하다. 세션은 웹 어플리케이션에서 사용자 상태를 유지하기 위한 방법이다. 레디스를 이용해 세션 데이터를 저장하면, 다수의 서버에서 엑세스할 수 있는 세션 데이터를 공유할 수 있으며 애플리케이션의 확장성을 높일 수 있다.
3. 메세지 큐:(Message Queue) : 레디스는 메시지 큐(Message Queue)의 역할을 수행할 수 있다. 메시지 큐는 비동기적인 메시지 처리를 지원하는 소프트웨어 패턴으로, 메시지 발신자(Sender)와 수신자(Receiver)간의 통신을 통해 데이터 처리를 수행한다. 레디스는 Pub/Sub 기능을 이용하여 메시지 큐를 구현할 수 있으며 높은 처리량과 낮은 지연 시간을 제공할 수 있다.
추가 / 삭제 / 조회하는 것은 O(1)의 속도를 가지지만, 중간의 특정 index 값을 조회할 때는 O(N)의 속도를 가지는 단점이 있다.
즉, 중간에 추가/삭제가 느리다. 따라서 head-tail에서 추가/삭제 한다. (push / pop 연산)
메세지 queue로 사용하기 적절하다.
Tip
소셜네트워크에서 타임라인과 같은 기능을 구현할 때 LPUSH를 통해 제일 첫 부분에 Insert하며 LRANGE 명령어를 통해 일정 크기를 고정적으로 빠르게 반환할 수 있다. LPUSH 명령어와 LTRIM 명령어를 함께 사용하면 Lists의 크기를 항상 일정하게 고정시킬 수 있다. LPUSH와 RPOP을 이용한다면 message를 전달하는 queue로 사용할 수 있다.
추가로 간단한 redis 명령어..!
- Keys *
해당 레디스 서버에 있는모든 key 를 검색한다.
와일드 카드 문자 사용할 수 있다.
?: 한 문자 *: 개수에 상관없이 문자
- ttl [키값]
해당 키의잔류 시간확인
단위는 초
-1은 사라지지 않는 키 이다.
현재 챗봇을 개발 하면서 모델이 이전 대화 내역을 참고 하기 위한 chat history 부분을 redis로 선택하여 개발을 진행하고 있다.