【问题标题】:Using Django's cache if and only if the user is logged-out?当且仅当用户注销时使用 Django 的缓存?
【发布时间】:2023-04-06 03:59:01
【问题描述】:

我需要在我的 Django 1.8 站点上实现缓存(显然是为了加快渲染速度)。计划是使用 Memcache,尽管这个问题与它没有直接关系。

目前,大量流量流向了一组保持不变的特定博客文章。但是,整个站点都有一个通用的动态顶栏,它可以从登录用户到登录用户而有所不同,所以我需要一个缓存功能,当且仅当用户是匿名的时候才会启动 - 例如如果用户登录,则完全绕过它。

看起来Django的内置缓存并不能真正区分登录和注销用户,所以如果我使用它,对登录的人会有不良影响。

我可能不得不使用较低级别的缓存 API 编写自己的缓存装饰器/缓存函数,并将其附加到站点上所有已注销可访问的 URL/视图。虽然它似乎并不困难,但这似乎是一个非常常见的功能。 Django 中真的没有任何东西可以正确地做到这一点吗?我担心我可能遗漏了什么,正在重新实现轮子。

谢谢!

【问题讨论】:

    标签: python django caching memcached


    【解决方案1】:

    首先,模板缓存被高估了。首先使用 django 调试工具栏来确定模板渲染在您的 django 安装中是否确实很慢。我敢打赌,这不是瓶颈。如果你发现它很慢。您可以按以下方式缓存每个用户:

    {% cache 300 FULL_PAGE request.build_absolute_uri request.user %}
    

    cache template tag 的第一个参数是超时时间,第二个参数是其他人唯一标识片段的名称。

    【讨论】:

    • 感谢您的回答 - 我了解如何在每个用户的基础上使用它。在这种情况下,模板渲染不是瓶颈。瓶颈是模板由多个数据库调用填充的事实(因为实际内容存储在大象博客/feincms 中)。因此,我需要在 URL / 控制器层进行缓存,甚至在它进行这些调用之前。
    • 这也可以用于非身份验证用户,因为这样用户对所有用户都是匿名的。是的,在 memcache 中缓存全部或部分查询可能会给您带来更好的速度提升
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2012-08-19
    • 2011-02-05
    相关资源
    最近更新 更多