[Redis] 더 빠른 DB

집중맞은 도둑력·2024년 4월 26일

웹 개발

목록 보기
12/14
post-thumbnail

0. 🔖 목차


  1. Redis
  2. Redis 사용하기
  3. 장고로 Redis 사용하기

1. Redis


Redis 소개

인-메모리 데이터베이스로 일반적으로 HDD를 저장소로 사용하는 데이터베이스에 비해 약 1000배 이상 빠름

key-value 구조의 NoSQL 데이터베이스이며 value에 String, Set, Hash 등 다양한 종류의 타입을 지원함

SQL처럼 복잡한 쿼리가 필요 없으며 한 번에 하나의 일만 처리하는 장점이 있지만 메모리에 위치한 DB여서 휘발성 데이터라는 단점이 있음. 중간중간 HDD의 주 DB에 데이터를 백업하는 방식으로 이러한 단점을 해결할 수 있음.

캐싱을 통해 빈번하게 많이 업데이트되는 데이터, RDB로 처리하기에는 너무 많은 쿼리가 발생하는 데이터, 여러 서버에서 동일하게 접근해야 하는 데이터 등의 병목현상을 해소하여 주 DB의 부하를 해소할 수 있음.

읽기 쓰기 전략

읽기: Look Aside(Cache Aside) 패턴

  1. 요청이 들어와서 데이터를 찾을때 캐시를 먼저 찾아봄
  2. 만약 캐싱되지 않았다면 DB를 조회

캐시와 DB가 분산되어 Redis가 죽어도 서비스에는 문제가 없으나 이후로 요청이 DB에 몰리기 때문에 서비스 장애 가능성이 있음.

최초에 캐시로 데이터를 넣어주는 캐시 워밍 작업필요

쓰기: Write Around 패턴

  • 모든 데이터는 DB에 바로 저장
  • cache miss가 발생했을때만 캐시와 DB에 저장
  • 캐시와 DB간 데이터 불일치 가능성
    • cache miss가 발생하기 전까지 DB에서 내용이 수정되었다면 서비스에 반영되지 않음 (cache가 만료될 때까지 유지됨)
    • cache의 만료시간(TTL)을 짧게 잡고 사용

2. Redis 사용하기


  1. Redis 깃헙에 접속 후 .msi 다운로드

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

  3. 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 삭제

3. 장고로 Redis 사용하기


장고는 다 해줍니다

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를 사용하는건 아님

장고와 Redis 연결하기

  1. pip install django-redis를 통해 Django와 Redis 사이를 연결해주는 미들웨어를 설치.

django-redis는 django가 기본으로 가지고 있는 cache 기능을 활용해서 편하게 캐싱을 구현할 수 있도록 지원함.

  1. settings.py에 아래의 설정을 만들기
CACHES = {  
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

위 코드의 LOCATION의 값에 내가 Redis를 실행한 서버의 주소를 적으면 됨

profile
틀린_내용이_있다면_말해주세요.

0개의 댓글