Redis 요약(python 예시)

이도현·2023년 11월 2일

0. 서론

데이터 스토리지와 관리는 모든 IT 시스템의 핵심 부분. 이 분야에서 Redis는 그 특유의 성능과 유연성으로 많은 개발자들에게 사랑받고 있다. 알아보자

1. Redis란?

  • Redis(Remote Dictionary Server)는 오픈 소스 인-메모리 데이터 스토어로, 키-값 형태의 데이터를 저장
  • 2009년 Salvatore Sanfilippo에 의해 처음 개발됨
  • 주로 캐싱, 세션 관리, 게임 리더보드, 실시간 애플리케이션 등에 사용

2. 주요 특징

  • 인-메모리 스토리지: Redis는 모든 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 제공
    디스크 기반 DB보다 훨씬 빠른 성능을 가능하게 함

  • 다양한 데이터 구조 지원: 키-값 스토어를 넘어 리스트, 셋, 해시, 정렬된 셋 등 다양한 데이터 구조를 지원

  • 지속성: 주기적으로 디스크에도 데이터를 저장하여 데이터 손실을 방지

  • 복제 및 확장성: 데이터 복제 및 클러스터링을 지원, 높은 가용성과 확장성을 제공

    클러스트링: 여러 노드들을 네트워크상에서 연결하여 하나의 서비스처럼 작동하게 만드는 것

  • Lua스크립팅: Lua스크립트를 지원하여 서버 측에서 복잡한 작업 수행 가능

local key = KEYS[1]
local value = ARGV[1]
local response = redis.call('SET', key, value)
return response

3. 설치(windows)

  • Redis를 설치하여 사용할 경로에 저장
  • 환경변수 -> 시스템 변수 -> path 에 경로 설정
  • 명령어
#Redis 서비스 시작
redis-server

# Redis CLI에 접속
redis-cli

# 키-값 저장
SET mykey "Hello Redis"

# 키로 값 조회
GET mykey

4. 사용사례(python)

  • 캐싱: 웹 애플리케이션에서 자주 요청되는 데이터를 Redis에 캐싱하여 빠른 응답 속도를 제공
import redis
import json

# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)

def get_user_profile(user_id):
    # 캐시에서 데이터를 가져옴
    data = r.get(f'user_profile:{user_id}')
    
    if data is not None:
        # 캐시에 데이터가 있는 경우, JSON 형태로 파싱하여 반환
        return json.loads(data)
    else:
        # 캐시에 데이터가 없는 경우, 데이터베이스에서 조회
        # 여기서는 데이터베이스 조회 대신에 임시 데이터를 생성하는 것으로 가정
        user_profile = {'id': user_id, 'name': 'John Doe', 'email': 'john@example.com'}
        
        # 데이터베이스 조회 결과를 캐시에 저장
        r.setex(f'user_profile:{user_id}', 3600, json.dumps(user_profile))  # 1시간 동안 유효
        
        return user_profile

# 사용 예시
profile = get_user_profile(123)
print(profile)
  • 세션스토어: 사용자의 세션 정보를 Redis에 저장하여, 상태를 유지하는 웹 애플리케이션 구현
import redis

# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)

def set_session(user_id, session_data):
    # 세션 데이터를 Redis에 저장
    r.setex(f'session:{user_id}', 1800, session_data)  # 30분 동안 유효

def get_session(user_id):
    # 세션 데이터를 Redis에서 조회
    return r.get(f'session:{user_id}')

# 사용 예시
set_session('user123', 'session_data_here')
session = get_session('user123')
print(session)
  • 메시지 브로커: Redis의 publish/subscribe 기능을 활용하여 실시간 메세지 전달 시스템을 구축
import redis
import time

# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)

# 메시지 발행자
def publisher():
    while True:
        # 메시지를 채널에 발행
        r.publish('channel', 'Hello Redis!')
        time.sleep(1)

# 메시지 구독자
def subscriber():
    # 구독할 채널 설정
    pubsub = r.pubsub()
    pubsub.subscribe('channel')
    
    # 메시지를 받을 때까지 대기
    for message in pubsub.listen():
        if message['type'] == 'message':
            print(f"Received: {message['data']}")

# 사용 예시
# 다른 쓰레드나 프로세스에서 이 함수들을 실행
# publisher()
# subscriber()

5. 결론

  • Redis는 인-메모리 데이터 스토어
  • 캐싱, 실시간 애플리케이션 등의 다양한 요구사항을 충족
profile
좋은 지식 나누어요

0개의 댓글