🥹 서론
이번 토이 프로젝트에서 Redis를 도입하기로 하여 Redis에 대해 학습한 내용을 정리해봅니다.
Redis에 대해서 알아보기 전에 Cache에 대해 이해가 필요하신 분은, 아래 링크를 확인해주세요!
😗 본론
Redis (Remote Dictionary Server) 란?
in-memory 형태의 No-SQL로써 Key-Value 쌍의 해쉬 맵 형태의 데이터베이스입니다.
in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성입니다.
No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점이 있습니다.
in-memory 종류
No-SQL 종류
대표적인 비교 Redis vs Memcached
Redis를 이야기할 때 가장 비교가 많이 되는 Cache는 Memcached입니다.
현재는 Redis가 압도적으로 많이 사용 중이며 그 이유에 대해서 알아보려고 합니다.
특징 비교. 😏
Memcached | Redis | |
1ms 이하의 지연 시간 | Yes | Yes |
개발의 용이성 | Yes | Yes |
데이터 파티셔닝 | Yes | Yes |
다양한 프로그래밍 언어 지원 | Yes | Yes |
다양한 데이터 타입 | - | Yes |
멀티쓰레드 (Multi Thread) | Yes | - |
스냅샷 (Snapshots) | - | Yes |
데이터 복제 (Replication) | - | Yes |
트랜잭션 지원 | - | Yes |
발행/구독 | - | Yes |
루아 스크립트 지원 | - | Yes |
위치기반 데이터 타입 지원 | - | Yes |
공통점
1. 1ms 이하의 지연 시간
데이터를 메모리에 저장하기 때문에 디스크 기반 데이터베이스보다 더 빠르게 데이터를 읽을 수 있습니다.
2. 개발자의 사용 용이성
문법적으로 사용하기 쉽고, 작성할 개발코드 양이 적습니다.
3. 데이터 파티셔닝
여러 노드에 데이터를 분산하여 저장할 수 있습니다.
이를 통해 수요가 증가할 때 더 많은 데이터를 효과적으로 처리하기 위해 스케일아웃이 가능합니다.
4. 광범위한 프로그래밍 언어 지원
여러 개발언어를 지원합니다.
지원되는 언어에는 Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등이 있습니다.
Memcached 특징
1. 멀티스레드 지원
Memcached는 멀티스레드를 지원하기 때문에, 멀티 프로세스 코어를 사용할 수 있습니다.
즉, 스케일업을 통해 더욱 많은 작업을 처리할 수 있습니다.
Redis 특징
1. 다양한 데이터 구조
Redis는 String 외에도 Set, Sorted Set, Hash, List 등 다양한 타입을 지원합니다.
애플리케이션에서 위에 적힌 다양한 데이터 타입을 활용할 수 있습니다.
예를 들어 Redis Sorted Set을 활용하여 순위 별로 정렬된 플레이어 목록을 유지하는 게임 리더보드를 쉽게 구현할 수 있습니다.
2. 스냅샷
Redis를 사용하면 특정 시점에 데이터를 디스크에 저장하여 보관할 수 있고, 장애 상황 시에 복구에 사용할 수 있습니다.
3. 복제
Redis를 사용하면 Master - Slave 구조로 여러 개의 복제본을 만들 수 있습니다.
이를 통해 데이터베이스 읽기를 확장하고 높은 가용성(오랜 시간 고장 나지 않는) 클러스트를 가질 수 있습니다.
4. 트랜잭션
Redis는 명령 그룹을 격리된 원자적 작업으로 실행할 수 있는 트랜잭션을 지원합니다.
5. Pub / Sub Messaging
Pub(발행) / Sub(구독) 방식의 메시징을 지원합니다.
따라서 고성능 채팅방, 실시간 댓글 스트림, 소셜 미디어 피드 및 서버 상호 통신에 사용할 수 있습니다.
6. 루아 스크립트 지원
매우 경량화된 절차 스크립트 언어인 루아를 지원합니다.
스크립트를 통해 성능을 높이고 응용 프로그램을 단순화하는 데 도움이 될 수 있습니다.
7. 위치기반 데이터 타입 지원
Redis에는 대규모 실시간 위치기반 데이터 작업을 지원합니다.
따라서, 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기 등의 작업을 수행할 수 있습니다.
이를 활용하여 맛집, 길 찾기, 지도기반의 고성능 서비스를 제공할 수 있습니다.
대부분 Memcached에 있는 기능을 Redis에서 제공하고 있습니다.
거기에 추가적인 더욱 많은 기능들을 Redis에서는 제공하고 있습니다.
그렇기 때문에 현재 많은 기업에서 Redis를 기본으로 사용하고 있는 것 같습니다.
아래 차트는 Google Trends 비교입니다.
여전히 Redis의 관심이 압도적으로 많은 걸 확인할 수 있습니다.
Memcached를 사용해야 하는 경우?
Memcached는 설정과 사용방법이 매우 간단합니다.
몇 대의 서버에만 매우 간단한 애플리케이션이 있고,
애플리케이션에 간단한 문자열 캐시만 필요한 경우 Memcached를 사용할 수 있습니다.
Redis를 사용하는 경우
Redis는 아직도 활발하게 현재 시장에서 많이 사용되고 있습니다.
기본적으로 서비스 환경에서는 확장성을 고려해서 Redis를 사용하는 것이 일반적으로 좋아 보입니다.
- 보다 광범위한 데이터 구조 및 스트림 처리 기능에 대한 액세스가 필요합니다.
- 키와 값을 제자리에서 수정하고 변경할 수 있는 기능이 필요합니다.
- 사용자 지정 데이터 제거 정책이 필요합니다. (예: 시스템의 메모리가 부족하더라도 키를 더 긴 TTL로 유지해야 함)
- 백업 및 웜 재시작을 위해 데이터를 디스크에 유지해야 합니다.
- 복제본 및 클러스터링을 통해 애플리케이션의 높은 가용성 또는 확장성을 확보해야 합니다.
😎 결론
현재 프로젝트에서는 확장성을 고려하여 다양한 자료형과 백업 및 복구 기능 등 다양한 측면에서Redis가 좋다고 판단되어 Redis를 선택하게 되었습니다.
가장 큰 이유는 아무리 멀티스레드를 제공한다지만, Redis 대신 Memcached를 꼭 써야 하는 이유를 느끼지 못했습니다.
참고
https://aws.amazon.com/ko/elasticache/redis-vs-memcached/
https://trends.google.com/trends/explore?date=all&q=redis,memcached,rabbitmq,SQLLite
https://deveric.tistory.com/65
https://velog.io/@sileeee/Redis-vs-Memcached#2-%EB%8B%A8%EC%A0%90-1
https://liebe97.tistory.com/37
https://velog.io/@sunwook317/spring-data-redis%EC%99%80-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98
'DataBase' 카테고리의 다른 글
[DB] 락(Lock) - MySQL 8.0 InnoDB (0) | 2022.08.07 |
---|---|
[DB] 상황에 맞는 Unique ID 생성 방법 (0) | 2022.08.02 |
[MySQL] Unknown column 'password' in 'field list' (0) | 2022.05.02 |
[MySQL] Mac M1 에서 MySQL password 재설정 (2) | 2022.04.25 |
[MS-SQL] IN 구문 사용 시 매개변수 2100개 초과 (0) | 2021.11.09 |