问题1: 在 mac 系统下,编写的 python 程序,用到了subscribe 功能,单机情况下是正常的,但是访问远程redis 服务器,会出现过半小时到1小时,subscribe 功能就收不到消息的情况。
原因主要是redis用到的socket 的keepalive 功能没有配置好
mac 系统下可如下写
python 代码
option = {
socket.SO_KEEPALIVE: 60,
socket.TCP_KEEPCNT: 10
}
db_bridge =redis.Redis(host="xxxx.xxx.xx.x",port=6379,password="password",db=10,
socket_keepalive=True,
socket_keepalive_options=option,
socket_connect_timeout=999999)
问题2:centos 系统下,以上还不行,还需要加入一个设置
if hasattr(socket,"TCP_KEEPIDLE"):
idle = getattr(socket,"TCP_KEEPIDLE")
option[idle] = 60
print("socket has TCP_KEEPIDLE")
因为 在 Mac 下,没有TCP_KEEPIDLE 这个配置,在 linux 下有
以上如果还不行,那可能还要改下 redis.conf的配置
目前挂了一晚上,还是正常的
网友评论