【问题标题】:Django SessionsDjango 会话
【发布时间】:2010-09-08 05:05:05
【问题描述】:

我正在查看 Django 中的会话,默认情况下它们存储在数据库中。文件系统和缓存会话有什么好处,我应该什么时候使用它们?

【问题讨论】:

  • 您应该知道,新的 Django 开发版本包括一个选项,它通过 memcached 写入数据库,这样即使 memcached 被清除、重置,无论如何,您仍然可以使用会话.
  • 如果您在 aws 上,会话数据可以存储在 dynamodb github.com/gtaylor/django-dynamodb-sessions

标签: python django session caching mongodb


【解决方案1】:

文件系统后端只有在您不打算将数据库用于系统的任何其他部分时才值得研究。如果您使用的是数据库,那么文件系统后端没有什么可推荐的。

memcache 后端比数据库后端快得多,但您会面临会话被清除和部分会话数据丢失的风险。

如果您是一个非常非常高流量的网站并仔细编写代码以便应对会话丢失,那么请使用 memcache。如果您不使用数据库,请使用文件系统缓存,但默认数据库后端几乎在所有情况下都是最好、最安全和最简单的选择。

【讨论】:

    【解决方案2】:

    我不是 Django 专家,所以这个答案通常是关于会话存储的。如果我错了,请投反对票。

    性能和可扩展性

    会话存储的选择会影响性能和可扩展性。如果您有一个非常受欢迎的应用程序,这应该只是一个大问题。

    数据库和文件系统会话存储(通常)都由磁盘支持,因此您可以廉价地拥有大量会话(因为磁盘很便宜),但请求通常必须等待数据被读取(因为磁盘很慢)。 Memcached 会话使用 RAM,因此支持相同数量的并发会话将花费更多(因为 RAM 很昂贵),但可能更快(因为 RAM 很快)。

    文件系统会话与您的应用程序运行所在的机器相关联,因此如果您的网站变得庞大,您将无法在多个应用程序服务器之间进行负载平衡。数据库和 memcached 会话让您有多个应用程序服务器与共享会话存储进行通信。

    简单

    会话存储的选择也会影响部署站点的难易程度。改变默认设置会花费一些复杂性。 Memcached 和 RDBMS 都有其自身的复杂性,但您的应用程序可能还是会使用 RDBMS。

    除非您有一个非常受欢迎的应用程序,否则简单性应该是更大的考虑因素。

    奖金

    另一种方法是存储session data in cookies(所有这些,而不仅仅是一个ID)。这样做的好处是会话存储会随着用户数量自动扩展,但也有缺点。您(或您的框架)需要小心阻止用户伪造会话数据。您还需要使每个会话保持较小,因为每次请求都会发送整个会话。

    【讨论】:

    【解决方案3】:

    从 Django 1.1 开始,您可以使用 cached_db 会话后端。

    这会将会话存储在缓存中(仅与 memcached 一起使用),并将其写回数据库。如果它已经从缓存中掉出来,就会从数据库中读取。

    虽然这比使用 memcached 存储会话要慢,但它增加了会话的持久性。

    欲了解更多信息,请参阅:Django Docs: Using Cached Sessions

    【讨论】:

    • 从那时起,这就是我们要走的路。
    【解决方案4】:

    选择会话后端时必须考虑的一件事是“会话数据多久修改一次”?如果每次请求都修改会话数据,即使是流量适中的网站也会受到影响,从而需要多次访问数据库来存储和检索数据。

    在我之前的工作中,我们专门使用 memcache 作为会话后端,它工作得非常好。我们的管理团队付出了巨大的努力,使两个特殊的 memcached 实例稳定得如磐石,但是在对初始设置进行了一些调整之后,我们没有任何会话后端操作中断。

    【讨论】:

      【解决方案5】:

      如果数据库的 DBA 不是您,则可能不允许您使用数据库支持的会话(这只是前端问题)。直到 django 支持轻松合并来自多个数据库的数据,以便您可以在单独的数据库中拥有特定于前端的内容,如会话和用户消息(django.contrib.auth 中的消息也存储在数据库中),您需要保留记住这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-02
        • 2011-07-10
        • 2012-06-01
        • 2019-07-05
        • 2011-10-07
        • 2011-01-20
        • 2013-11-19
        相关资源
        最近更新 更多