Skip to main content

Command Palette

Search for a command to run...

django에서 redis 사용해서 caching 하기

Updated
2 min read
django에서 redis 사용해서 caching 하기

homebrew를 사용하여 설치하는 redis는 서버를 설치하고 시작하는 과정이며,

redis 라이브러리를 사용하는 것은 코드에서 redis 서버와 상호작용 할 수 있는 라이브러리를 설치하는 것이다.

즉, redis 서버가 실행 중이어야 코드가 이를 사용하여 데이터를 저장하거나 검색할 수 있으며,

redis 라이브러리가 설치되어 있어야 코드가 redis 서버와 통신할 수 있다.


homebrew를 사용해서 redis 서버를 설치한다.

1. homebrew 설치

2. brew가 설치되어 있는지 확인 brew --version

3. redis 설치 brew install redis

4. redis가 설치되어 있는지 확인 ⁠redis-server --version

5. redis 실행 ⁠redis-server

vscode에서 redis 라이브러리 설치

1. redis 설치 ⁠pip install django-redis

2. 설치가 되었다면 settings.py에 설정을 해준다.

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

3. 캐싱 기능을 사용할 앱의 views.py에 redis에 import 해준다.

⁠from django.core.cache import cache


캐시 사용하는 방법 간단 예시

⁠cache.clear()⁠ : 모든 캐시를 지운다.

⁠cache.deleta(key)⁠ : key를 가진 캐시 항목 삭제

⁠cache.get(key)⁠ : key를 가진 캐시 항목을 가져온다.

⁠cache.set(key, value, timeout)⁠ : key로 캐시 항목을 설정한다.

from django.core.cache import cache
from ex.models import DataModel

def get_data():
    # 캐시에서 데이터를 찾는다.
    data = cache.get('my_data')

    if not data:
        # 캐시에 데이터가 없으면 db에서 가져온다.
        data = DataModel.objects.all()
        # 데이터를 캐시에 저장 (60초 동안 유지)
        cache.set('my_data', data, timeout=60)

    return data

코드에 적용

캐시에서 토큰을 가져온 후 캐시에 토큰이 존재하지 않으면 새 토큰을 요청하고,

요청한 토큰을 캐시에 저장한 후 반환하며, 캐시에 토큰을 저장할 때 30분 후 만료된다.

# 토큰 발급
def get_access_token(request):
    # 'spotify_access_token' key값으로 value를 가져온다.
    access_token = cache.get('spotify_access_token')    
    if access_token is None:    # 캐시 안에 토큰이 존재하지 않으면 아래의 로직 진행
        encoded = base64.b64encode(f"{CLIENT_ID}:{CLIENT_SECRET}".encode("utf-8"))
        headers = {
            'Authorization': f'Basic {encoded.decode("utf-8")}',
            "Content-Type": "application/x-www-form-urlencoded"
        }
        data = {
            "grant_type": "client_credentials",
        }
        response = requests.post(TOKEN_URL, headers=headers, data=data)
        response_data = response.json()

        access_token = response_data.get('access_token')
        expires_in = 10

        cache.set('spotify_access_token', access_token, timeout=expires_in)
    # return access_token 
    return JsonResponse({'access_token': access_token})

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts