【问题标题】:Is retrieving data from a redis instance slower than retreiving the same from Django's request.session dictionary?从 redis 实例中检索数据是否比从 Django request.session 字典中检索数据慢?
【发布时间】:2018-09-24 22:17:20
【问题描述】:

在 Python/Django 应用程序中,检索存储在 redis 中的值是否比检索存储在 request.session 字典中的值慢?


背景: 我有一个 Django 应用程序,我在其中使用基于数据库的会话。也就是说,我没有使用django.contrib.sessions,而是使用了这个漂亮的小3rd party library

我最近运行了一个基准测试,通过redis-py wrapper(即my_server.set('test','1'))在本地redis 实例中保存了一个测试值。我在request.session['test'] 中保存了相同的测试值。

然后我从每个中检索测试值,并比较所用时间。 request.session 在这种情况下,redis 的性能超过了 2 倍。


问题: 该应用程序不以任何方式分发,所有内容都是共享的,并且发生在同一台机器上 - 非常普通的设置。

结果对我来说似乎违反直觉。为什么?因为我的会话是基于数据库的,而且我认为 redis 会比 Django 提供的更快。很明显,我错了。

专家能否解释一下这里的实际情况?也许 redis 核心 API 上的 python 包装器正在减慢速度?


如果您需要更多信息,或者对我如何运行基准测试持怀疑态度,请询问。

附:我只是将这两种竞争方式放在一个 for 循环中进行 10 万次迭代,并测量完成所需的时间。

【问题讨论】:

    标签: django redis


    【解决方案1】:

    会话存储为单个 blob,而不是单个键。当您进入视图时,几乎可以肯定它已经被加载和解码,很可能是由 auth 中间件。加载后,它会在本地存储为字典,这是您的时序测试将测量的全部内容。

    【讨论】:

    • 啊,好吧,所以比较结果不可信,因为我没有在这里进行同类比较。谢谢!
    • 另外,使用会话,数据只会在请求结束时被写回后备存储(无论是数据库、Redis、平面文件等)。
    • @AKX: 暗示存在?
    • 即使写入会话字典(实际上)与在单个请求中写入常规内存字典一样快。
    • @AKX:是的,但我的用例还包括对所述数据的检索。
    猜你喜欢
    • 2018-08-11
    • 2022-01-19
    • 2013-06-06
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多