【发布时间】:2021-10-26 17:09:29
【问题描述】:
我有一个数据库查询在生产中需要几秒钟。我还有一个返回此查询的 DRF ViewSet 操作。
我已经使用cache_page 缓存了这个action。
@method_decorator(cache_page(settings.DEFAULT_CACHE_TIMEOUT))
@action(detail=False)
def home(self, request) -> Response:
articles = Article.objects.home()
return Response(serializers.ArticleListSerializer(articles, many=True).data,
headers={'Access-Control-Allow-Origin': '*'})
问题在于,15 分钟后,至少有一位用户需要等待 15 秒才能得到响应。我想在后台每 5 分钟预缓存一次,这样用户就不需要等待了。
我使用默认的缓存机制。
我的想法是创建一个management command,它将使用crontab 执行。每 5 分钟它会调用 Article.objects.home() 或 ViewSet.action 并更改它在缓存中的值。
由于这只是一个条目,我毫不犹豫地使用了数据库缓存。
你会怎么做?
编辑:由于默认 LocMemCache 是单线程的,我将使用数据库缓存。我只是不知道如何手动缓存view 或QuerySet。
【问题讨论】:
标签: python django caching django-rest-framework django-cache