Redis
개념
Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다. Redis는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis는 REmote DIctionary Server의 약어입니다. - AWS Redis 설명 문서
구조
Redis는 메모리 기본 기본적으로 싱글스레드 기반으로 요청을 Queue

데이터를 저장하는 방식을 위 3개가 있다
- Replication
- Sentinel
- Cluster
데이터 구조

String : 단순 증감 연산
Bitmaps : 비트 연산을 통해 방문한 사용자 확인
(오직 정수의 자료형만을 사용 가능)
Lists : 자체적인 blocking을 제공하므로 messaging queue로 사용
(키가 있는 경우에만 데이터를 추가하는 방법도 있음)
(트위터에서 시간마다 있는 사용자를 확인하고 해당 유저를 위한 캐싱을 사용하여 모든 사용자가 원하는 데이터를 캐싱하지 않음으로써 저장 용량 줄임)
Hashes : key - value의 데이터를 사용하는 경우
Sets : 중복 제거된 유니크 값
Sorted Sets : 중복 제거된 유니크 값에서 순서를 넣음
(score를 기준으로 정렬 후 동일한 값의 score이면 사전순으로 정렬)
HyperLogLogs : 중복되지 않는 값의 개수를 저장하는데 저장된 값을 다시 확인할 수 없다
(접속한 IP가 몇번인지 저장)
Streams: append-only 형식으로 Log를 저장하기 가장 좋은 형식
(Kafka와 약간 비슷)
(소비자 그룹을 지정하여 특정 소비자만 데이터를 가져올 수 있게 할 수 있음)
저장방식
- RDB (Redis Database): RDB persistence performs point-in-time snapshots of your dataset at specified intervals.(실시간으로 저장되지 않아도 되는 캐싱 서버용으로 사용)
- AOF (Append Only File): AOF persistence logs every write operation received by the server. These operations can then be replayed again at server startup, reconstructing the original dataset. Commands are logged using the same format as the Redis protocol itself.(데이터가 변경된 log가 전부 저장)
- No persistence: You can disable persistence completely. This is sometimes used when caching.
- RDB + AOF: You can also combine both AOF and RDB in the same instance.(안전성이 최고로 필요할때)
사용 사례
캐싱
다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.
세션 관리
Redis는 세션 관리 작업에 매우 적합합니다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.
실시간 순위표
Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.
속도 제한
Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있습니다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.
대기열
Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.
채팅 및 메시징
Redis에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.
사용기
- key를 검색하는 경우 keys * 보다는 scan으로 대체 ⇒ keys * 으로 검색되는 동안 다른 동작을 하지 못함
- 키 나누기
- STOP-WRITES-ON-BGSAVE-ERROR = NO
- MAXMEMORY-POLYCY = ALLKEYS-LRU
- Max Memory 설정
참조:

'BACK END' 카테고리의 다른 글
No String-argument constructor/factory method to deserialize from String value (0) | 2024.11.29 |
---|---|
KAFKA 설정 및 사용법 (0) | 2024.10.29 |