인-메모리 데이터베이스로 일반적으로 HDD를 저장소로 사용하는 데이터베이스에 비해 약 1000배 이상 빠름
key-value 구조의 NoSQL 데이터베이스이며 value에 String, Set, Hash 등 다양한 종류의 타입을 지원함
SQL처럼 복잡한 쿼리가 필요 없으며 한 번에 하나의 일만 처리하는 장점이 있지만 메모리에 위치한 DB여서 휘발성 데이터라는 단점이 있음. 중간중간 HDD의 주 DB에 데이터를 백업하는 방식으로 이러한 단점을 해결할 수 있음.
캐싱을 통해 빈번하게 많이 업데이트되는 데이터, RDB로 처리하기에는 너무 많은 쿼리가 발생하는 데이터, 여러 서버에서 동일하게 접근해야 하는 데이터 등의 병목현상을 해소하여 주 DB의 부하를 해소할 수 있음.
캐시와 DB가 분산되어 Redis가 죽어도 서비스에는 문제가 없으나 이후로 요청이 DB에 몰리기 때문에 서비스 장애 가능성이 있음.
최초에 캐시로 데이터를 넣어주는 캐시 워밍 작업필요
Redis 깃헙에 접속 후 .msi 다운로드


C / Program Fiels / Redis / redis-cli.exe 를 실행하면 redis-cli를 볼 수 있음, ping을 입력했을 때 Pong이 출력되면 정상

Redis 기본 명령어
keys * 모든 키 조회
get key 해당 키의 value 조회
set key value key value 저장
setex key seconds value soconds초 뒤에 삭제되는 key value 저장
expire key seconds 해당 키의 만료시간을 설정
rename key newkey key 이름 변경
del key1 [key2 key3 ...] key 삭제
from django.core.cache import cache # 캐시 임포트
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Product
from .serializers import ProductSerializer
@api_view(["GET"])
def product_list(request):
cache_key = "product_list"
if not cache.get(cache_key): # 해당 키가 있는지 확인
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
json_data = serializer.data
cache.set(cache_key, json_data, 10) # 없다면 해당 키를 캐시에 저장
response_data = cache.get(cache_key) # 해당 값을 받아옴
return Response(response_data)
아직 Redis를 사용하는건 아님
pip install django-redis를 통해 Django와 Redis 사이를 연결해주는 미들웨어를 설치.django-redis는 django가 기본으로 가지고 있는 cache 기능을 활용해서 편하게 캐싱을 구현할 수 있도록 지원함.
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
위 코드의 LOCATION의 값에 내가 Redis를 실행한 서버의 주소를 적으면 됨