Работая в настоящее время с DRF для моего проекта, я решил использовать систему кэширования (в данном случае REDIS), чтобы ограничить количество запросов SQL непосредственно к БД. Поэтому я видел / читал много страниц по этой теме c, но я не нашел своего ответа.
на веб-сайте DRF, они говорят о том, чтобы использовать cache_page
с помощью декоратор @method_decorator
. Хорошо, это работает правильно, но в заголовке HTTP появляется поле expiration_date
, указывающее браузеру поместить в свой кэш всю страницу и ничего не запрашивать до конца срока годности. Так что, если время истечения около текущего времени + 5 минут, в течение 5 минут мы «живем» с кешем веб-браузера, и если что-то изменится в течение этих 5 минут, мы не сможем этого знать. Вы согласны с таким поведением этого декоратора?
Поскольку я хотел бы получать информацию о любых изменениях за это время, я обновляю свой код для кэширования всех необходимых SQL запросов. Вот так, если что-то изменится, я sh кеш и в следующий раз, я получу обновленные данные.
Вот легкий пример ModelViewSet:
queryset = MyModel.objects.all().select_related(...).prefeth_related(...)
cache.set('MyKey', queryset)
return queryset.filter(...).exclude(...)
С этим кодом набор запросов содержит все записи, которые затем помещаются в кэш. Затем, если хотите, просто отфильтруйте или исключите.
Для следующего запроса моего ModelViewSet:
if 'MyKey' in cache:
queryset = cache.get('MyKey')
return queryset.filter(...).exclude(...) # => at that step, the framework do a request to the DB !
Если кто-то может помочь мне понять, почему запрос SQL выполняется к БД, тогда как все в кеше?
Спасибо