

우리가 웹서버를 운영할 때 데이터를 저장하는 것은 거의 필수적이다.
다만 몇몇 휘발성 데이터, 자주 사용하는 데이터들을 DB 에 모조리 담아낸다면, 이것은 메모리 공간과 접근 속도에 크나큰 악영향을 끼칠 것이다.
Redis 는 이러한 상황에 사용하기 좋은데, Redis 는Remote Dictionary Server 의 약자로 인 메모리 (In-memory) 데이터 저장소로, 데이터를 디스크가 아닌 메모리에 저장하고 처리하여 뛰어난 속도가 장점이다.
일반적으로 Redis 는 인증번호, JWT 와 같은 인증토큰 관리, 실시간성 데이터 순위와 같이 DB에 저장할 필요가 크게 없거나, 자주 바뀌는 데이터들 관리에 적합하다.
pip install redis 실행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()
.env 파일에 다음과 같이 환경변수 설정# REDIS
# Docker-compose 서비스 이름
REDIS_HOST=redis
# Redis 기본 포트
REDIS_PORT=6379
app/common 에 redis.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
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")