14.[DRF] Redis 장고에서 레디스 사용하기 (feat. AWS)

https://github.com/microsoftarchive/redis/releases

  • msi 다운로드 후 인스톨 (안 하면 에러남)

cmd

pip install django-redis

settings.py

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1", #-> 여기서 1은 DB이름인 것 같음
        "OPTIONS": {
            "CLIENT_CLASS" : "django_redis.client.DefaultClient",
        }
    }
}

현업의 경우

채팅:

CHANNEL_LAYERS = {
    'default' : {
        'BACKEND' : 'channels_redis.core.RedisChannelLayer',
        'CONFIG' : {
            'hosts': [(REDIS_LOCATION_PRIMARY, 6379)],
        }
    }
}

캐싱:

CACHE_TTL = 30
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": [ REDIS_LOCATION_PRIMARY, REDIS_LOCATION_REPLICA],
        "OPTIONS": {
            "CLIENT_CLASS" : "django_redis.client.DefaultClient",
            "MASTER_CACHE": REDIS_LOCATION_PRIMARY,
        }
    }
}

AWS

KakaoTalk_20220818_155320662.png

  • AWS Elasticache의 대쉬보드에서 엔드포인트를 따온다
  • 엔드포인트 앞에 http://가 붙지 않고 뒤에 6379 포트번호도 떼준다

.env

REDIS_LOCATION_PRIMARY : "주소"
REDIS_LOCATION_REPLICA : "주소"

views.py

from django.core.cache import cache
from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT
CACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)

wsl

$ redis-server
sudo apt-get update
sudo apt-get install redis
sudo service redis-server start
redis-cli 
127.0.0.1:6379> ping
PONG

views.py

def view_recipe(request, id):
    if cache.get(id):
        print("DATA FROM CACHE")
        recipe = cache.get(id)
    else:
        try: recipe = Recipe.objects.get(id=id)
            cache.set(id, recipe)
            print("DATA FROM DB")
        except Recipe.DoestNotExist:
            return redirect('/')

    context = {'recipe': recipe}

    return render(request, "view.html", context}