Django缓存页面预填充/预缓存

2024-06-01 02:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库查询,在生产过程中需要几秒钟。我还有一个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是单线程的,所以我将使用数据库缓存。我只是不知道如何手动缓存viewQuerySet


Tags: 用户数据库cachehomeobjects过程responsearticle
1条回答
网友
1楼 · 发布于 2024-06-01 02:14:29

cron或芹菜beat任务(如果您已经使用芹菜)看起来是最好的选择

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

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

此外,在规划作业频率时,请记住缓存超时。你不想刷新得太早也不想太晚

相关问题 更多 >