【问题标题】:Django session data & Redis as backendDjango 会话数据和 Redis 作为后端
【发布时间】:2012-12-01 21:49:27
【问题描述】:

我的顾问接管了一个相当繁忙的 Django 应用程序,该应用程序通过 Redis 处理缓存,但 Django.session 数据除外。唯一可用的信息是诸如“Reverting session storage via Redis”之类的提交消息。

我已经测试了存储在 Redis 中的 Django 会话,这似乎是一个不错的解决方案,但我很犹豫是否将其推送到管道中,因为我想知道为什么最初的开发人员会取消它。

据我了解 Django 会话逻辑,它只是一个 key:value 存储,其中 value 是带有相关会话数据的腌制 Python 对象。

短版:

使用 Redis 处理 Django.session 数据有什么缺点?

【问题讨论】:

  • 我能想到的唯一缺点是会话不再是永久性的。但是谁需要它呢?
  • 我也相信使用 redis 没有缺点。无论如何,在您的项目的上下文中,它只是一个非常快速的缓存后端。我也会使用 django.contrib.sessions.backends.cached_db 会话后端将会话数据保存在数据库中。
  • @freakish 这可能是问题所在,所涉及的产品是一个自定义电子商务网站,做了一些奇怪的事情,特别是购物车的 id 是在会话中保存的(所以当客户 IP 的时候它会消失转移或某些东西清除了会话 cookie)。
  • @freakish 暂时打开 redis 进行会话存储,几个小时后,我收到了一波客户投诉,说他们的购物车不见了。似乎过去的开发人员以某种方式错误配置了 Redis,认为它是一个过分夸大的内存缓存。
  • @David 我怀疑这是 Redis 本身的问题。那里没有太多要配置的东西。您的应用程序中肯定存在错误(或错误的设计)。

标签: django redis session-storage


【解决方案1】:

Redis 是存储会话而不是将会话添加到 SQL 数据库中的快速快捷方式(尝试监控查询会话表所用的时间),如果您使用 django-toolbar app 之类的工具,这一点显然很清楚.

另一方面,唯一可能出现问题的是您的会话数据持久性,在 Redis 中已通过 2 种不同的方法进行处理,您可以选择适合您需要的方法,请参阅文档了解更多详细信息,以及创建集群或故障转移 Redis 服务器的选项。

我遇到了类似的情况,出于速度和其他与项目相关的原因,我需要将会话存储在 NoSQL DB 中,这发生在我使用 django-redisession 应用程序时,我建议尝试一下。

最后,关于你一直在说的购物卡问题,这绝对与Redis无关,请检查你的系统配置以及不同软件组件之间的交互方式。我还建议您在副本服务器中进行测试,而不是在生产服务器上执行此操作,以确保一切正常工作且配置良好。

更新

顺便说一句,Stackoverflow 使用 Redis 进行会话处理,这是使用 NoSQL DB 作为后端的会话管理的一个非常强大的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2015-02-21
    • 2011-03-12
    • 2017-04-14
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多