레디스: Redis

레디스 5 - Redis 파이썬 클라이언트 사용법

https://youtu.be/-KWSbCXIRRQ?si=Lwxc_uUO6ICgBYJh

레디스 4 : Redis 스냅샷, database 설정


Redis 클라이언트란?

Redis 클라이언트는 애플리케이션 코드에서 Redis 서버와 통신할 수 있도록 도와주는 라이브러리다.

  • Redis 프로토콜 직접 구현 필요 없음
  • 명령어를 메소드 호출 형태로 사용
  • 커넥션 관리, 직렬화, 인증 처리 포함

Python에서는 가장 널리 쓰이는 클라이언트가 redis (redis-py)다.


Python redis 모듈 설치

환경에 따라 아래 중 하나를 사용하면 된다.

# pip3 사용
pip3 install redis

# pip 사용
pip install redis

# 특정 Python 버전 명시
python3.11 -m pip install redis

설치가 끝나면 코드에서 바로 import 가능하다.


Redis 모듈 불러오기 및 연결 객체 생성

import redis

redis_connect = redis.Redis(
    host='레디스_서버_IP',
    port=6379,
    decode_responses=True,
    password='비밀번호',
    db=0
)

이 객체 하나로 Redis 명령어 대부분을 메소드 형태로 실행할 수 있다.


Redis 객체 생성자 파라미터 정리

실무에서 자주 사용하는 옵션 위주로 정리하면 다음과 같다.

  • host Redis 서버 IP 또는 도메인

  • port Redis 포트 (기본값: 6379)

  • decode_responses

    • True: 결과를 문자열(str)로 반환
    • False: bytes로 반환 👉 Python에서는 보통 True 권장
  • username Redis ACL 사용자 (기본값: default)

  • password Redis 인증 비밀번호 (비밀번호 미설정 시 생략 가능)

  • db Redis database 번호 (기본값: 0)

  • ssl / ssl_certfile / ssl_keyfile / ssl_ca_certs TLS 기반 Redis 접속 시 사용


Python에서 Redis 명령어 사용하기

아래 예제는 CLI에서 사용하던 명령을 Python 코드로 옮긴 형태다.


Redis 연결 및 기본 String CRUD

import redis

redis_connect = redis.Redis(
    host='아이피',
    port=6379,
    decode_responses=True,
    password='비밀번호'
)

# String SET
redis_connect.set("2", "lee")
redis_connect.set("3", "jeong")
redis_connect.set("4", "ahn")

# 만료 시간 설정 (초 단위)
redis_connect.expire("3", 100)

# String GET
value = redis_connect.get("2")
print(value)  # lee

# 존재하지 않는 키는 None 반환

데이터 삭제

redis_connect.delete("4")

키 조회: scan vs keys

# scan (권장)
cursor, keys = redis_connect.scan(0)
print(keys)

# keys (주의)
keys = redis_connect.keys("*")
print(keys)

중요한 차이점:

  • scan

    • 비차단
    • 대량 키 환경에서도 안전
    • 운영 환경 권장
  • keys

    • 모든 키를 한 번에 조회
    • 키 많으면 Redis 전체 블로킹
    • 운영 환경 사용 금지에 가깝다

실무 관점에서 꼭 짚고 갈 포인트

이 단계에서 기억해야 할 핵심은 이것이다.

  • Redis는 DB가 아니라 보조 저장소
  • 네트워크 장애, Redis 장애는 언제든 발생
  • get() 결과는 항상 None 가능성 고려
  • 캐시는 없어도 시스템이 동작해야 한다
  • Redis를 신뢰하면 장애가 커진다

그래서 실무 코드에서는 보통:

value = redis_connect.get(key)
if value is None:
    # DB 조회
    # Redis 재저장

같은 패턴이 기본이 된다.


정리

이번 글에서 다룬 내용을 요약하면 다음과 같다.

  • Python에서는 redis-py로 Redis를 사용
  • Redis 명령은 대부분 메소드 형태로 제공
  • decode_responses=True는 거의 필수
  • scan과 keys 차이는 반드시 이해
  • Redis는 “있으면 빠르고, 없어도 살아야” 한다


© 2020. All rights reserved.

SIKSIK