configurable in-memory cache sizes

This commit is contained in:
Laura Klünder 2024-02-07 20:20:40 +01:00
parent 62ce1ab1e0
commit a8261d0b3d
3 changed files with 8 additions and 2 deletions

View file

@ -1,6 +1,7 @@
import json import json
from functools import wraps from functools import wraps
from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Prefetch from django.db.models import Prefetch
from django.utils.cache import get_conditional_response from django.utils.cache import get_conditional_response
@ -15,7 +16,7 @@ from c3nav.mapdata.models.locations import SpecificLocation
from c3nav.mapdata.utils.cache.local import LocalCacheProxy from c3nav.mapdata.utils.cache.local import LocalCacheProxy
from c3nav.mapdata.utils.cache.stats import increment_cache_key from c3nav.mapdata.utils.cache.stats import increment_cache_key
request_cache = LocalCacheProxy(maxsize=64) request_cache = LocalCacheProxy(maxsize=settings.CACHE_SIZE_API)
def api_etag(permissions=True, etag_func=AccessPermission.etag_func, base_mapdata=False): def api_etag(permissions=True, etag_func=AccessPermission.etag_func, base_mapdata=False):

View file

@ -8,6 +8,7 @@ from itertools import chain
from typing import Any, List, Mapping, Optional, Union from typing import Any, List, Mapping, Optional, Union
from django.apps import apps from django.apps import apps
from django.conf import settings
from django.db.models import Prefetch, Q from django.db.models import Prefetch, Q
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -24,7 +25,7 @@ from c3nav.mapdata.utils.cache.local import LocalCacheProxy
from c3nav.mapdata.utils.geometry import unwrap_geom from c3nav.mapdata.utils.geometry import unwrap_geom
from c3nav.mapdata.utils.models import get_submodels from c3nav.mapdata.utils.models import get_submodels
proxied_cache = LocalCacheProxy(maxsize=128) proxied_cache = LocalCacheProxy(maxsize=settings.CACHE_SIZE_LOCATIONS)
def locations_for_request(request) -> Mapping[int, LocationSlug]: def locations_for_request(request) -> Mapping[int, LocationSlug]:

View file

@ -155,6 +155,10 @@ ENABLE_MESH = config.getboolean('c3nav', 'enable_mesh', fallback=True, env='ENAB
SERVE_ANYTHING = config.getboolean('c3nav', 'serve_anything', fallback=True, env='SERVE_ANYTHING') SERVE_ANYTHING = config.getboolean('c3nav', 'serve_anything', fallback=True, env='SERVE_ANYTHING')
SERVE_API = config.getboolean('c3nav', 'serve_api', fallback=SERVE_ANYTHING, env='SERVE_API') SERVE_API = config.getboolean('c3nav', 'serve_api', fallback=SERVE_ANYTHING, env='SERVE_API')
# how many location lookups to cache in each worker's in-memory LRU cache proxy
CACHE_SIZE_LOCATIONS = config.getint('c3nav', 'cache_size_locations', fallback=128)
CACHE_SIZE_API = config.getint('c3nav', 'cache_size_api', fallback=64)
RENDER_SCALE = config.getfloat('c3nav', 'render_scale', fallback=20.0) RENDER_SCALE = config.getfloat('c3nav', 'render_scale', fallback=20.0)
IMAGE_RENDERER = config.get('c3nav', 'image_renderer', fallback='svg') IMAGE_RENDERER = config.get('c3nav', 'image_renderer', fallback='svg')
SVG_RENDERER = config.get('c3nav', 'svg_renderer', fallback='rsvg-convert') SVG_RENDERER = config.get('c3nav', 'svg_renderer', fallback='rsvg-convert')