공부/python

Django에서 CACHES 설정을 했는데 300개 이상 저장이 안될때

inSaPPoRo 2024. 5. 18. 23:17

Django를 버전업을 했는데 memcached를 사용하지 않고 db에 저장하기로 변경했습니다.
BACKEND를 django.core.cache.backends.memcached.MemcachedCache에서 django.core.cache.backends.db.DatabaseCache로 변경하였다.
memcached에 저장할때는 cache가 어떻게 써지는지 관심도 없었지만 db는 확인 하기 편하고 삭제도 가능해서 db의 table를 자주 봤는데
cache가 300이상 만들지 못하고 삭제되는것을 확인했다.

문제점

memcached를 사용할때 설정값

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'XX.XX.XXX.XX:XXXXX',
        'TIMEOUT': 43200,
        'MAX_ENTRIES': 1000,
        'CULL_FREQUENCY': 2,
    },
}

버전업 하고 db 사용할때 설정값

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "cache_table",
        "TIMEOUT": 86400,
        "MAX_ENTRIES": 1000,
        "CULL_FREQUENCY": 2,
    }
}

이런식으로 설정하고 db에 ENTRIES가 1000개까지 생성할 수 있다고 생각했다.

착각이었다
https://docs.djangoproject.com/en/3.2/topics/cache/#cache-arguments

위의 도큐멘트에서 확인하면 알 수 있지만
MAX_ENTRIES는 OPTIONS 아래에 값을 넣어 주어야 한다.(예전 소스를 믿지말자)

수정한 설정값

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "cache_table",
        "TIMEOUT": 86400,
        'OPTIONS': {
            "MAX_ENTRIES": 1000,
            "CULL_FREQUENCY": 2,
        }
    }
}

설명하자면 db를 사용할때는
LOCATION는 db에 저장 될 table명이고
TIMEOUT는 cache의 생존시간
MAX_ENTRIES는 저장되는 엔트리 수
CULL_FREQUENCY는 캐시가 최대 크기에 도달했을 때 삭제할 항목의 비율입니다.

마치며

예전부터 쓰던 설정이었지만 문제가 있었다. 하지만 그냥 대충 그대로 이용한것이 안좋은 결과를 낳았다.
도큐멘트를 한번만 봤었다면 좋았을 것이라는 생각이 들었다.