我正在查看Django中的会话,默认情况下它们存储在数据库中.文件系统和缓存会话有什么好处,我应该在什么时候使用它们?
如果您不打算将数据库用于系统的任何其他部分,则只需查看文件系统后端.如果您使用的是数据库,则文件系统后端无需推荐它.
memcache后端比数据库后端快得多,但是您可能会遇到清除会话并且某些会话数据丢失的风险.
如果你是一个非常,非常高流量的网站和代码,所以你可以应付失去一个会话然后使用memcache.如果您不使用数据库,请使用文件系统缓存,但几乎在所有情况下,默认数据库后端都是最好,最安全和最简单的选项.
我不是Django的专家,所以这个答案一般都是关于会话商店的.如果我错了,就投票.
会话存储的选择会影响性能和可伸缩性.如果您有一个非常受欢迎的应用程序,这应该只是一个大问题.
数据库和文件系统会话存储都(通常)由磁盘支持,因此您可以廉价地拥有大量会话(因为磁盘很便宜),但是请求通常必须等待数据被读取(因为磁盘很慢).Memcached会话使用RAM,因此支持相同数量的并发会话将花费更多(因为RAM很昂贵),但可能更快(因为RAM很快).
文件系统会话与运行应用程序的框相关联,因此如果您的站点变得庞大,则无法在多个应用程序服务器之间进行负载平衡.通过数据库和memcached会话,您可以让多个应用程序服务器与共享会话存储进行通信.
会话商店的选择也会影响部署网站的容易程度.改变默认值会花费一些复杂性.Memcached和RDBMS都有自己的复杂性,但你的应用程序可能会使用RDBMS.
除非你有一个非常受欢迎的应用程序,简单性应该是更大的问题.
另一种方法是将会话数据存储在cookie中(所有这些,而不仅仅是ID).这具有会话存储自动随用户数量而扩展的优点,但它也有缺点.您(或您的框架)需要小心阻止用户伪造会话数据.您还需要保持每个会话较小,因为整个事件将随每个请求一起发送.
从Django 1.1开始,您可以使用cached_db会话后端.
这会将会话存储在缓存中(仅与memcached一起使用),并将其写回数据库.如果它已从缓存中删除,它将从数据库中读取.
虽然这比仅使用memcached存储会话要慢,但它会为会话增加持久性.
有关更多信息,请参阅:Django Docs:使用缓存会话