Как мы можем получить обновленные данные, обновив кэш с помощью cache_page в DRF с тем же маршрутом?
Веб-сайт похож по функциональности на Twitter и мы используем механизм кэширования Django для фида, но когда пользователь создал свой пост, он не может найти свой пост в течение следующих 10 минут из-за кэширования, и мы хотим показать последние результаты пользователю, поэтому, как мы можем показать последние данные пользователю после создания его поста, используя тот же маршрут
Вот код urls.py
from django.views.decorators.cache import cache_page
from . import views
CACHE_TIME=60*10
urlpatterns = [
path('', cache_page(CACHE_TIME)(views.PostListAPIView.as_view()), name="post-list")
]
если мы вызовем API --> http://127.0.0.1:8000/v1/posts/, то данные будут храниться в кэше в течение следующих 10 минут, но я хочу обновить данные после определенного события, поэтому, как мы можем получить обновленные данные до истечения 10 минут
также, Мы нашли решение для этого, если мы передаем http://127.0.0.1:8000/v1/posts/?{username}=true, то мы можем получить последние данные для пользователя , но есть ли другой лучший подход или возможность показать последние данные? Если да, то пожалуйста, перечислите метод и некоторые детали о нем
Вы можете использовать
select_for_update , который был представлен в Django 1.4 и выполняет блокировку базы данных на уровне строк. Все объекты в queryset будут "заблокированы" до конца блока транзакции, что означает, что другие транзакции не смогут изменить или получить блокировки на них.Это лучший подход для вас:
- Использование сигнала для определения добавления сообщения
- В документации по кэшу django говорится, что cache.delete('key') должно быть достаточно. Так что просто нужно использовать его, и вызвать функцию для разогрева кэша, если это необходимо. .
Код примера
@receiver(post_save, sender=Post)
def invalidate_post_list_cache(sender, instance, **kwargs):
"""
This signal helps invalidate post list cache and warm-up cache
"""
cache.delete('key')
call_function_to_warm_up_cache()
<