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
는 캐시가 최대 크기에 도달했을 때 삭제할 항목의 비율입니다.
마치며
예전부터 쓰던 설정이었지만 문제가 있었다. 하지만 그냥 대충 그대로 이용한것이 안좋은 결과를 낳았다.
도큐멘트를 한번만 봤었다면 좋았을 것이라는 생각이 들었다.
728x90