[웹서버] Redis 설치 및 실행

오규성·2026년 2월 3일

웹 서버 [FastAPI]

목록 보기
4/4
post-thumbnail

우리가 웹서버를 운영할 때 데이터를 저장하는 것은 거의 필수적이다.
다만 몇몇 휘발성 데이터, 자주 사용하는 데이터들을 DB 에 모조리 담아낸다면, 이것은 메모리 공간과 접근 속도에 크나큰 악영향을 끼칠 것이다.

Redis 는 이러한 상황에 사용하기 좋은데, Redis 는Remote Dictionary Server 의 약자로 인 메모리 (In-memory) 데이터 저장소로, 데이터를 디스크가 아닌 메모리에 저장하고 처리하여 뛰어난 속도가 장점이다.

일반적으로 Redis 는 인증번호, JWT 와 같은 인증토큰 관리, 실시간성 데이터 순위와 같이 DB에 저장할 필요가 크게 없거나, 자주 바뀌는 데이터들 관리에 적합하다.

Redis 사용

  1. 터미널에서 pip install redis 실행
  2. BaseSettings 를 상속한 Settings 클래스에 Redis Host, Port 설정
class Settings(BaseSettings):
    DATABASE_URL: str
    DIRECT_URL: str | None = None
    SECRET_KEY: str
    ALGORITHM: str
    ACCESS_TOKEN_EXPIRE_MINUTES: int
    REFRESH_TOKEN_EXPIRE_DAYS: int

    # Redis 설정
    REDIS_HOST: str 
    REDIS_PORT: int
    model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")


settings = Settings()
  1. .env 파일에 다음과 같이 환경변수 설정
# REDIS 
# Docker-compose 서비스 이름
REDIS_HOST=redis
# Redis 기본 포트
REDIS_PORT=6379
  1. app/commonredis.py 파일 생성 후 다음 코드를 입력
from app.common.config import settings
from redis import Redis

# Redis 클라이언트 생성
# db 0번방 설정 (서로 다른 데이터 분리용이라고 함)
# decode_responses=True : 바이트 대신 문자열로 받기
# socket_timeout=5 : 연결 타임아웃
# host,port 는 .env에서 설정
redis_client = Redis(
    host=settings.REDIS_HOST,
    port=settings.REDIS_PORT,
    db=0,
    decode_responses=True,
    socket_timeout=5,
)


def get_redis() -> Redis:
    return redis_client
  1. 앞으로 Redis 에 저장할 데이터가 존재하는 경우 다음과 같이 사용하면 된다.
class Redis:
	def __init__(self, redis: Redis):
    	self.redis = redis
	
	# 저장 및 만료시간 따로 설정
    def redis_set_with_expire():
    	self.redis.set("key", "value")
        self.redis.expire("key", 60)

	# 저장 및 만료시간 함께 설정
    def redis_setex():
    	self.redis.setex("key", 60, "value")

참고사항

  1. 모든 Redis 명령어의 경우 실패 시 Exception 을 발생시키기 때문에 Redis 의 경우 DB 와 달리 잘 저장되었는지 따로 확인할 필요가 없다.
  2. Redis 의 time 은 기준으로 실행되기에 매우 주의 !
profile
안드로이드 개발자 Gyu 의 개발 블로그 !

0개의 댓글