从Redis实例中检索数据是否比从Django的request.session字典中检索数据慢?

时间:2018-09-24 11:49:42

标签: django redis

在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包装器正在减慢速度?


如果您需要更多信息,或者对我如何运行基准表示怀疑,请提出。

P.s。我只是将两种竞争方式放入for循环中进行100K次迭代,并测量完成所需的时间。

1 个答案:

答案 0 :(得分:2)

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