python连接redis时间太长如何解决

问题描述:python连接redis时间太长,建立连接时间太长,连接超时,set时间长,第一次get时间长

 

今日遇到一个问题,python连接redis时间竟然长达4秒钟。

python连接redis时间太长如何解决_第1张图片

这个是使用ipython测试的,可以看到,第一次查询竟然使用了4.02s,多次尝试大体相同,但是第二次查询速度就会变快。

解决方案:

将localhost换为127.0.0.1

 

原因探秘:

测试代码:

import redis

#建立连接池,步骤一
%time pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

#建立连接,步骤二
%time r = redis.Redis(connection_pool=pool)

#进行查询,步骤三
%time print(r.get('foo1'))

#再次查询,步骤四
%time print(r.get('foo1'))

注意:以上代码无法在python解释器执行,仅可在ipython解释器执行,ipython的使用方法和安装方法,详询度娘。

我们可以看到,唯一卡顿的是步骤三,步骤三查询完成后,步骤四速度便会很快,根据在网上搜集的资料,大概情况如下(如错误欢迎指正):

1.步骤一、二并未真正建立连接,只是声明了连接方式,步骤三才是开始连接。

2.所以,真正导致时间较长的原因是python与redis建立链接过慢。

3.wireshark抓包情况如下:

python连接redis时间太长如何解决_第2张图片

我们可以发现,python主动请求连接::1这个IP地址,导致了大量的超时和连接失败,而后才尝试连接127.0.0.1

::1地址即为ipv6的环回地址,等价于ipv4的127.0.0.1地址,但是因为redis没有监听ipv6的环回地址,所以导致一直请求失败,然后脚本自动开始请求127.0.0.1,才开始正常建立连接。

 

经过 ping测试,发现Windows解析localhost确实是到::1

ping localhost

python连接redis时间太长如何解决_第3张图片

所以解决方案为,将localhost改为127.0.0.1

是否可以改redis配置,使其监听::1?

进行了两种测试,一种是监听地址改为 0.0.0.0 无效

改为::1 报错,redis无法启动::1:6379无法识别

 

但是查看redis配置文件显示支持ipv6,暂未配置成功。

你可能感兴趣的:(python,redis,python,redis,数据库)