Django 缓存用户对象

Django caches user object

我们的网站有时有大约 600 个经过身份验证的用户试图在 5 分钟的时间范围内注册一个事件。我们有一个 VPS 和 1 CPU 和 1GB 内存。在这些时刻,网站速度变慢并出现 502 错误。

出于这个原因,我在 FileBasedCache 中使用了每个站点的缓存。这非常有效,压力测试也很好。

但是,当人们登录时,他们会被重定向到他们的个人资料。这是代码:

class UserRedirectView(LoginRequiredMixin, RedirectView):

    permanent = False

    def get_redirect_url(self):
        return reverse("users:detail", kwargs={"membership_number": self.request.user.membership_number})

用户被重定向到 url,他们的 membership_number

class UserDetailView(LoginRequiredMixin, DetailView):

    model = User
    slug_field = "membership_number"
    slug_url_kwarg = "membership_number"

一些用户报告说他们在登录后被重定向到其他人 his/her 个人资料。

这是如何运作的?如何防止网站的用户特定部分被缓存?例如用户还会看到特定于他们所在组的事件列表。换句话说,每个用户都应该看到不同的列表。

有什么想法吗?最佳做法?

您应该能够改变 cookie 上的缓存,以便登录用户(假设基于 cookie 的身份验证)获得另一个缓存密钥。

from django.views.decorators.vary import vary_on_cookie
@vary_on_cookie
def my_view(request):
    pass

https://docs.djangoproject.com/en/dev/topics/cache/#controlling-cache-using-other-headershttps://docs.djangoproject.com/en/dev/topics/cache/#using-vary-headers