본문 바로가기

[IT] 레디스(redis) 기본 개념 정리

 

Redis(리디스)는 오픈 소스 인 메모리 데이터 구조 스토어입니다. 

 

레디스(redis)의 특징

인 메모리 데이터 저장: Redis는 메모리에 데이터를 저장하므로 빠른 읽기 및 쓰기 속도를 제공합니다. 이는 데이터베이스 및 캐시 솔루션으로 매우 효율적입니다.


다양한 데이터 구조: Redis는 문자열, 리스트, 세트, 해시, 정렬된 집합, 비트맵 등 다양한 데이터 구조를 지원합니다. 이는 다양한 응용 프로그램에서 유연하게 사용할 수 있도록 합니다.


지속성: Redis는 디스크에 데이터를 저장하고 지속성을 제공합니다. 이를 통해 시스템 재부팅 후에도 데이터를 보존할 수 있습니다.


고급 기능: Redis는 발행-구독 메커니즘, 트랜잭션, Lua 스크립팅, 클러스터링 등의 고급 기능을 제공하여 다양한 사용 사례에 대응할 수 있습니다.


분산 캐싱: Redis는 분산 캐싱 시스템으로 사용될 수 있으며, 여러 인스턴스 간에 데이터를 공유하여 성능을 향상시킬 수 있습니다.

 

레빗MQ(RabbitMQ)와 어떤 차이점이 있을까?

데이터 구조와 용도
레디스: Redis는 인 메모리 데이터 구조 스토어로서 주로 캐싱, 세션 관리, 대기열 등에 사용됩니다. 다양한 데이터 구조를 지원하며, 주로 간단한 키-값 형태의 데이터를 저장하고 처리하는 데 사용됩니다.
RabbitMQ: RabbitMQ는 메시지 지향 미들웨어로서, 메시지 큐의 역할을 수행하여 분산된 시스템 간에 데이터를 안전하고 신속하게 전달하는 데 사용됩니다. 메시지 큐, 발행-구독, 워크 큐 등의 패턴을 지원하며, 비동기 통신과 작업 분산에 적합합니다.


메시지 전달 방식
레디스: Redis는 푸시 및 풀 방식의 메시지 전달을 지원하지만, 일반적으로 레디스는 발행-구독(Pub/Sub) 메커니즘을 사용하여 메시지를 전달합니다. 이는 일반적으로 특정 주제에 대한 구독자들이 메시지를 수신할 수 있는 패턴입니다.
RabbitMQ: RabbitMQ는 큐를 통해 메시지를 전달하며, 발행자가 메시지를 큐에 전달하고 구독자가 큐에서 메시지를 가져가는 방식입니다. 이는 큐의 용량이 채워질 때까지 메시지를 저장하고, 구독자가 처리 준비가 될 때까지 대기하는 방식입니다.


확장성
레디스: Redis는 주로 단일 노드에서의 확장성에 초점을 맞추고 있으며, 클러스터링을 지원합니다. 더 많은 읽기 작업을 처리하기 위해 읽기 전용 복제본을 사용할 수 있지만, 쓰기 작업에 대한 확장은 일반적으로 한계가 있습니다.
RabbitMQ: RabbitMQ는 분산 환경에서의 확장성을 지원하기 위해 클러스터링과 다양한 HA(High Availability) 모드를 제공합니다. 이를 통해 높은 처리량과 가용성을 유지할 수 있습니다.

 

JAVA에서 레디스 사용 예시

레디스 설치 및 실행
우선 레디스를 설치하고 실행해야 합니다. 이를 위해 레디스 공식 웹사이트에서 레디스를 다운로드하고 설치합니다. 설치가 완료되면 레디스 서버를 실행합니다.

https://redis.io/

 

Redis - The Real-time Data Platform

Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.

redis.io


레디스 클라이언트 연결
레디스 클라이언트를 사용하여 레디스 서버에 연결합니다. 이를 위해 일반적으로 레디스 클라이언트 라이브러리를 설치하고 사용합니다. 여기서는 Python에서 redis-py 라이브러리를 사용할 것입니다.

 

Jedis 라이브러리 추가
Maven이나 Gradle과 같은 의존성 관리 도구를 사용하여 프로젝트에 Jedis 라이브러리를 추가합니다.Maven의 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

 

레디스 연결 및 데이터 저장
다음은 자바 코드에서 레디스와의 연결을 설정하고 데이터를 저장하는 예시입니다.

import redis.clients.jedis.Jedis;

public class RedisExample {
    public static void main(String[] args) {
        // 레디스 클라이언트 생성 및 연결
        Jedis jedis = new Jedis("localhost", 6379);

        // 데이터 저장
        String key = "example_key";
        String value = "example_value";
        jedis.set(key, value);

        // 데이터 검색
        String retrievedValue = jedis.get(key);
        System.out.println("Retrieved value: " + retrievedValue);

        // 레디스 연결 종료
        jedis.close();
    }
}

 

실행 및 결과 확인
이 코드를 실행하면 레디스에 키-값 쌍이 저장되고, 동일한 키로 값을 검색하여 출력합니다.

 

※ Jedis 라이브러리를 사용하는 것 외에도 Lettuce와 같은 다른 레디스 클라이언트 라이브러리도 있습니다.

 

Redis 사용시 주의 사항

메모리 사용: Redis는 메모리 기반의 데이터 저장소이기 때문에 메모리 사용량을 주의해야 합니다. 대용량 데이터를 다룰 때 메모리 부족 문제가 발생할 수 있으므로, 적절한 메모리 용량을 할당하고 메모리 사용량을 모니터링해야 합니다.


영속성 설정: 기본적으로 Redis는 메모리에만 데이터를 저장하므로 서버 재시작 시 데이터가 손실될 수 있습니다. 따라서 데이터의 영속성을 보장하기 위해 RDB(snapshot) 또는 AOF(Append-Only File) 방식의 백업을 활성화해야 합니다.
적절한 데이터 타입 선택: Redis는 다양한 데이터 타입을 지원하며, 각 데이터 타입은 특정한 용도에 적합합니다. 예를 들어, 문자열은 단순한 키-값 쌍을 저장하는 데 사용되고, 리스트는 순서가 있는 데이터 집합을 저장하는 데 사용됩니다. 올바른 데이터 타입을 선택하여 데이터를 구조화하고 효율적으로 활용해야 합니다.


명령어 사용 주의: Redis는 강력한 명령어 세트를 제공하지만, 잘못된 명령어 사용은 데이터 손실이나 서버 다운의 원인이 될 수 있습니다. 따라서 신중하게 명령어를 사용하고, 특히 데이터 삭제나 수정과 같은 위험한 작업을 수행하기 전에는 백업을 생성하는 것이 좋습니다.


스냅샷 주기 설정: RDB 백업을 사용하는 경우 스냅샷 주기를 적절하게 설정해야 합니다. 너무 자주 스냅샷을 생성하면 성능에 부담을 줄 수 있고, 너무 오래된 스냅샷은 데이터 손실 가능성을 증가시킬 수 있습니다.


클러스터링: 대규모 환경에서는 Redis 클러스터링을 사용하여 가용성과 확장성을 향상시킬 수 있습니다. 클러스터링 설정 및 관리에 주의해야 하며, 잘못된 구성은 전체 시스템에 영향을 미칠 수 있습니다.

 

 

반응형
그리드형