Я использовал для кэширования запроса базы данных в глобальной переменной для ускорения моего приложения. Поскольку это сильно недопустимо (и это создавало проблемы), я хочу использовать любой тип кеша Django. Я попробовал LocMemCache и DatabaseCache, но оба берут ... около 15 секунд, чтобы установить мою переменную (в два раза больше, чем требуется для генерации данных размером 7 МБ).Очень медленно писать в кеш Django
Ожидаемое? Я делаю что-то неправильно ?
(Memcached ограничен 1 МБ, и я не могу разбить свои данные, которые состоят из произвольно больших двоичных масок).
Редактировать: FileBasedCache занимает 30 секунд для установки.
Settings.py:
CACHES = {
'default': {...},
'stats': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# or 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'stats',
},
}
Service.py:
from django.core.cache import caches
def stats_service():
stats_cache = caches['stats']
if stats_cache.get('key') is None:
stats_cache.set('key', data) # 15s with DatabaseCache, 30s with LocMemCache
return stats_cache.get('key')
Глобальная переменная (супер быстрая) версия:
_cache = {}
def stats_service():
if _cache.get('key') is None:
_cache['key'] = data
return _cache['key']
Кэш замачивает значение, я не удивлен, что для определения количества 7MB требуется столько времени. В зависимости от того, к чему вы клонируете и для чего вы его используете, могут быть лучшие способы. – knbk
Это объясняет это, я полностью пропустил этот момент. Я абсолютно не хочу рассортировать его (очевидно, 7 МБ ОЗУ не проблема). Я кэширую бит-маски (двоичные массивы numpy), которые я использую повторно при каждом вычислении. У вас есть какие-нибудь предложения? – JulienD
Я нашел это: https://djangosnippets.org/snippets/2396/. Мой единственный страх с глобальным диктом заключается в том, что я использую многопроцессорность в вычислениях с использованием кэшированных массивов. – JulienD