[Django] - Redis 로 Caching 하기


먼저 Redis에 대해서 알아보자.

NoSQL


redis는 key-value 방식의 NoSQL 데이터 베이스이다.

NoSQL은 다음과 같은 종류가 있다.

  • 키-밸류 : Redis, memcached, Oracle, Coherence…
  • 열 지향 와이드 컬럼 : Cassandra, HBASE, Cloud Database…
  • 문서형 : MongoDB, Couchbase, DynamicDB…
  • 그래프형 : Neo4j

Redis


REDIS(REmote Dictionary Server)

모든 데이터를 메모리에 저장하고 조회하기에 최적화 되어있다.

크게 5가지 데이터 형식을 지원한다.

<String, Set, Sorted Set, Hash, List>

  • 읽기 성능 증대를 위해 서버 측 복제를 지원한다.

장애 처리 및 읽기 성능을 위해 슬레이브/마스터 복제를 지원한다. 마스터에서 업데이트 되면 슬레이브로 실시간 데이터가 복제된다.

  • 쓰기 성능 증대를 위해 클라이언트 측 샤딩을 지원한다.

샤딩은 데이터를 분산하여 저장한다.

이미지

Django


먼저 django-redis를 설치해주자.

pip install django-redis

이제 settings.py에 cache로 설정해주자.

# settings.py

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

이제 view 부분에서 caching을 해주자.

# views.py

from django.http import JsonResponse
from django.core.cache import cache

from .models import Post

def my_view(request):
    posts = cache.get_or_set('posts', Post.objects.all().values('id', 'data'))
    return JsonResponse(list(posts), safe=False)

정상적으로 caching 등록이 끝났다.