Redis란?
Redis : REmote DIctionary Server
Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 NoSQL DBMS
사용에 따라 데이터베이스로 사용될 수도 있고, Message Queue, Shared Memory 용도로 사용될 수 있음. 주로 Cache Server로 사용.
Redis의 특징과 장점
Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없음
- 고정되지 않은 스키마를 가지므로 키마다 원하는 내용만 저장 가능
In-Memory 데이터베이스
매우 빠름
서버 재시작 시 모든 데이터 유실
복제 기능이 있지만 사람의 실수에는 복원 불가
백업이 필요할 수 있음 (persist option 지원)
다양한 자료구조를 제공
String, List, Hash, Set, Sorted Set, Stream 등
사용 용이, 개발 편의성 증대
application 단에서 필요한 로직을 DB 단에서 줄일 수 있음
list형 데이터 입력/삭제가 MySQL에 비해 10배 빠름
Single Thread로 동작
한 번에 여러 클라이언트의 요청을 수행할 수 없음 때문에 여러 요청이 동시에 돌아가지는 않지만 빠르게 처리해 동시성을 보장하려고 노력하고 경쟁상태를 방지(원자적 연산 수행)
한 클라이언트가 오래 걸리는 작업을 요청하면 장애가 발생할 수 있음
여러 대의 서버 구성 가능 (Master-Slave)
Database, Cache, Message broker로 사용됨
- Cache로 사용 시 무조건 TTL로 사용. 시간 중요
읽기 성능 증대를 위한 서버 측 리플리케이션을 지원
쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원
데이터베이스를 두고 Redis를 사용하는 이유는 데이터베이스는 물리디스크에 직접 write 작업이 이루어지기 때문에 데이터가 손실되지 않는 장점이 있지만, 사용자가 많아질 수록 디스크의 부하가 발생하게 된다. 이에 따라 한번 읽어온 데이터를 인 메모리 DB인 Redis에 캐싱하여 데이터 조회 작업을 빠르게 하여 서비스의 속도를 향상시켜줄 수 있다.

Redis의 주 활용 방식
여러 서버에서 같은 데이터를 공유가 필요할 때
- 한대에서만 필요하면 전역변수 쓰면 되지 않나? → ❌ Redis 자체가 Atomic하기때문에 Thread safe 하고 Single Thread 이기 때문에 Race Condition 발생 가능성이 낮음
인증 토큰 등을 저장 (Strings or hash)
Ranking 보드로 사용 ( Sorted Set )
유저 API Limit
Job QUeue