REmote DIctionary Server
로 캐시나 빠른 응답속도를 가진 데이터베이스로 사용되는 오픈소스 In-memroy NoSQL key-value 저장소이다. 디스크가 아닌 메모리에 데이터를 저장하기 때문에 빠른 속도를 가지며 안정성을 가진다.
brew install redis
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
Install Redis on Linuxdocker pull redis:버전
docker run -p 6379:6379 --name redis redis:버전
$ redis-cli ping
PONG
Django는 Django cache framework를 통해 캐싱기능을 제공한다.
Memcached
: Redis와 비슷하게 In-memory 데이터베이스이다.Redis
Database caching
: DB에 캐싱을 위한 테이블을 만들고 캐싱을 사용한다.Filesystem caching
: 특정 파일을 만들고 파일시스템을 통해 캐싱을 사용Local-memory caching
: 말 그대로 로컬 메모리를 사용해 캐싱한다. 배포 환경에 적절하지 않을 수 있다.Dummy caching
: 실제로 캐싱하지 않고 캐싱하는 척 한다.Redis v.s Memcached
: Memcached는 단순성을 위해 설계된 반면 Redis는 광범위한 사용에 효과적인 풍부한 기능 제공
- Redis ⇒ 다양한 데이터 타입 제공(해싱을 통한 객체 저장 등)
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
}
}
호스트 주소를 변경하여 간단하게 다른 위치의 Redis 또한 사용 가능하다.
ex1) redis로 설정하여 다른 docker container에 있는 redis 사용
ex2) xxx.xxx.x.x로 설정하여 다른 서버의 Redis 사용
import datetime
def date_key(date) -> str:
if isinstance(date, datetime.datetime):
return date.strftime("%Y-%m-%d")
elif isinstance(date, datetime.date):
return date.strftime("%Y-%m-%d")
elif isinstance(date, str):
return date
else:
raise ValueError("Invalid date type")
from django.core.cache import cache
from ..redis_key_schema import date_key
def get(self, request):
serializer = InputSerializer(data=request.query_params)
if serializer.is_valid():
date = serializer.validated_data.get("date", datetime.today().date())
# 캐시에서 조회
data = cache.get(date_key(date))
if data is None:
building_to_minute_power(date)
minute_power_refresh()
data = get_hour_power(group_list, schedule_list)
# 캐싱
cache.set(date_key(date), data)
res = ...
else:
return res_fail(
"Invalid query parameters.", status=status.HTTP_400_BAD_REQUEST
)
return res_ok(data=res, status=status.HTTP_200_OK)
: django.core.cache
를 통해 간단하게 캐싱을 사용할 수 있다.