gpt4 book ai didi

python - Django cache_page - 预填充/预缓存

转载 作者:行者123 更新时间:2023-12-05 05:57:02 26 4
gpt4 key购买 nike

我有一个数据库查询在生产环境中需要几秒钟。我还有一个返回此查询的 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 分钟在后台预缓存一次,这样用户就不需要等待。

我使用默认的缓存机制。

我的想法是创建一个管理命令,它将使用crontab 执行。每 5 分钟它将调用 Article.objects.home()ViewSet.action 并更改它在缓存中的值。

因为这只是一个条目,所以我毫不犹豫地使用数据库缓存。

你会怎么做?

编辑:由于默认的 LocMemCache 是单线程的,我将使用数据库缓存。我只是不知道如何手动缓存 viewQuerySet

最佳答案

cron 或 Celery 节拍任务(如果您已经在使用 Celery)看起来是最好的选择。

调用 Article.objects.home() 不会做太多事情,除非你缓存在管理器的 home() 方法中(这可能是一个有效的选项,可以简化自动缓存刷新)。

要自动刷新 View 缓存,您最好从管理命令向 URL 发送实际请求。您还需要在发送请求之前使缓存失效,以便对其进行更新。

此外,在规划作业频率时请记住缓存超时。您不希望刷新得太早或太晚。

关于python - Django cache_page - 预填充/预缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68941914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com