美文网首页
redis.conf详解之tcp-keepalive

redis.conf详解之tcp-keepalive

作者: 小易哥学呀学 | 来源:发表于2021-11-22 18:28 被阅读0次

用法

单位

tcp-keepalive 300

 

用途

linux系统中,客户端发送的最后一个数据包与redis发送的第一个保活探测报文之间的时间间隔。单位是
 

注意事项

1.tcp-keepalive只在linux生效,在其他系统不生效(比如mac),只按照其他系统内核自身的设置。
2.keepalivelinux系统中只控制tcp_keepalive_time选项。

 

linux保活定时器相关参数

cat /proc/sys/net/ipv4/tcp_keepalive_time 
cat /proc/sys/net/ipv4/tcp_keepalive_intvl KeepAlive探测包的发送间隔,默认值为75s
cat /proc/sys/net/ipv4/tcp_keepalive_probes 收不到响应,共计发几次。

 

mac系统测试

结论:与是否设置tcp-keepalive毫无关系

设置mac内核参数net.inet.tcp.keepidle为3秒
sudo sysctl -w net.inet.tcp.keepidle=3000
redis获取tcp-keepalive配置(300s),并不在发送任何请求。
127.0.0.1:6379> config get tcp-keepalive
1) "tcp-keepalive"
2) "300"
观察tcp情况,发现每隔3~4秒探测一次(客户端未关闭,所以每次都得到响应),tcp-keepalive未生效。
$ sudo tcpdump -i lo0 port 6379

18:07:24.933364 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, length 0
18:07:24.933382 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, length 0
18:07:24.933427 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2931790987 ecr 2245109217], length 0
18:07:24.933436 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2245112230 ecr 2931787974], length 0

18:07:28.040568 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, length 0
18:07:28.040577 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, length 0
18:07:28.040592 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2931794047 ecr 2245112230], length 0
18:07:28.040596 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2245115290 ecr 2931790987], length 0

18:07:31.105544 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, length 0
18:07:31.105571 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, length 0
18:07:31.105592 IP localhost.63787 > localhost.6379: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2931797050 ecr 2245115290], length 0
18:07:31.105603 IP localhost.6379 > localhost.63787: Flags [.], ack 1, win 6378, options [nop,nop,TS val 2245118293 ecr 2931794047], length 0

 

linux系统测试

结论:redis的tcp-keepalive覆盖了linuxtcp_keepalive_time(默认是2小时)

redis获取tcp-keepalive配置(6s),并不在发送任何请求。
127.0.0.1:6379> config get tcp-keepalive
1) "tcp-keepalive"
2) "6"
观察tcp情况,发现每隔6秒探测一次(客户端未关闭,所以每次都得到响应),tcp-keepalive生效了!
$ sudo tcpdump -i lo0 port 6379
13:50:42.731182 IP localhost.41692 > localhost.redis: Flags [P.], seq 18:63, ack 11469, win 512, options [nop,nop,TS val 4084903638 ecr 4084900541], length 45: RESP "config" "get" "tcp-keepalive"
13:50:42.731243 IP localhost.redis > localhost.41692: Flags [.], ack 63, win 512, options [nop,nop,TS val 4084903638 ecr 4084903638], length 0
13:50:42.731471 IP localhost.redis > localhost.41692: Flags [P.], seq 11469:11500, ack 63, win 512, options [nop,nop,TS val 4084903638 ecr 4084903638], length 31: RESP "tcp-keepalive" "6"
13:50:42.731538 IP localhost.41692 > localhost.redis: Flags [.], ack 11500, win 512, options [nop,nop,TS val 4084903638 ecr 4084903638], length 0

13:50:48.759844 IP localhost.redis > localhost.41692: Flags [.], ack 63, win 512, options [nop,nop,TS val 4084909667 ecr 4084903638], length 0
13:50:48.759896 IP localhost.41692 > localhost.redis: Flags [.], ack 11500, win 512, options [nop,nop,TS val 4084909667 ecr 4084903638], length 0

13:50:54.742957 IP localhost.redis > localhost.41692: Flags [.], ack 63, win 512, options [nop,nop,TS val 4084915684 ecr 4084909667], length 0
13:50:54.743012 IP localhost.41692 > localhost.redis: Flags [.], ack 11500, win 512, options [nop,nop,TS val 4084915684 ecr 4084903638], length 0

13:50:57.748679 IP localhost.41692 > localhost.redis: Flags [.], ack 11500, win 512, options [nop,nop,TS val 4084918690 ecr 4084903638], length 0
13:50:57.748720 IP localhost.redis > localhost.41692: Flags [.], ack 63, win 512, options [nop,nop,TS val 4084918690 ecr 4084915684], length 0

 

原生注释

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Force network equipment in the middle to consider the connection to be
#    alive.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 300 seconds, which is the new
# Redis default starting with Redis 3.2.1.
#tcp-keepalive 300

相关文章

  • redis.conf详解之tcp-keepalive

    用法 单位秒 用途 在linux系统中,客户端发送的最后一个数据包与redis发送的第一个保活探测报文之间的时间间...

  • redis.conf详解之include

    1、用法: 在 $yourPath/redis.conf 文件中添加以下配置 2、用途: 模块化配置,比如所有服务...

  • redis.conf详解之module

    1、用法: 在 $yourPath/redis.conf 文件中添加以下配置 2、module制作: 准备工作 1...

  • redis.conf详解之timeout

    用法 单位是秒 用途 在timeout时间内如果没有数据交互,redis侧将关闭连接。没有数据交互:redis客户...

  • redis.conf详解之port

    用法 用途 指定redis监听的端口。 注意事项: 1.默认是63792.配置为0时将不监听任何端口(也就是服务没...

  • redis.conf详解之bind

    用法 绑定到本机的其中一个ip 绑定到本机的两个ip,如果10.0.0.1无效redis依旧可以启动。 绑定到本机...

  • redis.conf详解之daemonize

    用法 作为非守护进程运行 作为守护进程运行 注意事项: 默认情况下,Redis不作为守护进程运行。如果以守护进程运...

  • redis.conf详解之pidfile

    用法 注意事项: 如果pidfile文件创建失败,也不会影响redis启动。配置了daemonize或pidfil...

  • redis.conf详解之maxclients

    本文基于 redis_version:6.2.5 用法 设置一个redis实例支持的最大连接数。 注意事项: 默认...

  • Redis.conf 详解

    Redis.conf 详解 参考地址:https://www.cnblogs.com/zhang-ke/p/598...

网友评论

      本文标题:redis.conf详解之tcp-keepalive

      本文链接:https://www.haomeiwen.com/subject/ajnwtrtx.html