Попытка понять, что происходит во время низкоуровневого кэша django() В частности, подробности о том, какая часть набора запросов хранится в memcached.
Во-первых, я правильно интерпретирую django-документы?
- набор запросов (объект python) имеет/поддерживает свой собственный кеш
- доступ к базе данных ленив; даже если значение queryset.count равно 1000, если я делаю object.get для 1 записи, тогда dbase будет только один раз, для этой 1 записи.
- при доступе к представлению django через apf prefork MPM, каждый раз, когда конкретный экземпляр X-демона вызывает вызов определенного представления, которое включает в себя что-то например "tournres_qset = TournamentResult.objects.all()", это приведет к тому, что каждый раз в новом объекте tournres_qset создается. То есть все, что может быть кэшировано внутри страны по объекту pwnon tournres_qset из предыдущего (tcp/ip) посещения, вообще не используется новым запросом tournres_qset.
Теперь вопросы о сохранении вещей в memcached в представлении. Скажем, я добавляю что-то вроде этого в верхней части представления:
tournres_qset = cache.get('tournres', None)
if tournres_qset is None:
tournres_qset = TournamentResult.objects.all()
cache.set('tournres', tournres_qset, timeout)
# now start accessing tournres_qset
# ...
Что хранится во время cache.set()?
-
Получается ли сериализация и сохранение всего запроса (объекта python)?
-
Поскольку набор запросов еще не использовался для получения каких-либо записей, это просто пустая трата времени, поскольку на самом деле содержание конкретных записей сохраняются в memcache? (Любые будущие запросы получат запрос объект из memcache, который всегда будет начинать новый, с пустым локальным кеш запросов; доступ к dbase всегда будет иметь место.)
-
Если приведенное выше значение истинно, тогда я должен просто повторно сохранить запрос в конце представления, после того, как он использовался во всех некоторые записи, которые приведут к обновлению локального кеша запроса, и который всегда должен быть повторно сохранен в memcached? Но тогда это всегда приведет к еще раз сериализации объекта запроса. Так много для ускорения.
-
Или же cache.set() принудительно перенастраивает объект queryset для итерации и доступ из dbase всех записей, которые также будут сохранены в Memcache? Все будет сохранено, даже если доступ только открывается подмножество набора запросов?
Я вижу ловушки во всех направлениях, что заставляет меня думать, что я нахожусь непонимая целую кучу вещей.
Надеюсь, что это имеет смысл и ценят разъяснения или указатели на некоторые "стандартные" рекомендации. Спасибо.