【问题标题】:Multiple permanent connection for Django?Django的多个永久连接?
【发布时间】:2011-07-28 04:05:14
【问题描述】:

我的网站正在使用 Django,现在我想将部分逻辑移植到 Redis,所以我的 views.py 代码需要 Redis 连接,显然我无法在 views.py 中编写连接到 redis 代码因为它可能会被多次调用,所以我需要将连接放在 django 中的某个地方,也许是中间件?

但是我不想把这个复杂化,只是在连接MySQL数据库的地方,我想为Redis连接添加一个全局对象。 XMPP conenction 和 ZeroMQ 可能会晚些。

如何做到这一点?

任何想法都值得赞赏。在此先感谢:)

【问题讨论】:

    标签: django connection redis


    【解决方案1】:

    在典型的 Django 服务器设置中,多个请求将由同一个工作进程处理。

    您可以简单地在views.py之上放置一个全局变量来保存连接,并在每个视图函数/类中使用连接,连接将在工作进程启动时建立,并在工作进程被回收时关闭。这是半永久连接,但足够好。

    MySQL 连接在 Django 中的工作方式相同。这不是每个请求的每个数据库连接,而是每个工作进程的生命周期

    【讨论】:

      【解决方案2】:

      你想这样做并不明显。您为什么要这样做并不明显。

      那么为什么不在views.py 中连接呢?使用单个“全局连接”意味着添加锁定/序列化代码,以确保您的连接在对视图的多次调用中可以安全使用。我实际上在我的各种和杂项views.py文件中的方法中创建和连接。有时我会连接到一个或另一个实例。我没有看到任何性能问题,也不必担心并发安全。我让 Redis 解决这个问题。

      全局共享连接的另一个方面是性能下降 - 您将有一个页面视图等待另一个页面视图完成,然后才能运行。通过允许每个视图拥有自己的连接,您可以避免一个视图在等待访问全局连接器时拖慢另一个视图。

      请考虑一下:如果您的查询非常小而且非常快,以至于您不希望看到序列化访问 Redis 的每个页面会导致性能下降,那么您在连接时不会看到每个页面的连接有任何性能下降、查询和关闭。我非常怀疑设置连接的成本远远超过序列化连接到 Redis 的所有页面访问。

      所以我的建议是尝试一下。当且仅当您发现问题时,您才应该担心实施您可能不需要的东西。

      【讨论】:

        【解决方案3】:

        已经有一段很棒的代码。 http://github.com/andymccurdy/redis-py

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-04
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 1970-01-01
          • 2016-01-16
          相关资源
          最近更新 更多