Redis配置tcp-keepalive和timeout参数测试

这篇具有很好参考价值的文章主要介绍了Redis配置tcp-keepalive和timeout参数测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

启动redis实例

nohup ./redis-server &

使用redis-cli连接并设置tcp-keepalive属性和timeout属性,两个属性都是0,redis默认是不开启的。

[root@redis-7-106 logs]# redis-cli -p 6379
127.0.0.1:6379> config get tcp-keepalive
1) "tcp-keepalive"
2) "0"
127.0.0.1:6379> config get timeout
1) "timeout"
2) "0"
127.0.0.1:6379>

使用config set 命令分别设置tcp-keepalive属性和timeout属性的值,或者在redis.conf配置文件中修改这两个属性,要注意修改配置文件需要重启redis服务。

127.0.0.1:6379> config set tcp-keepalive 60
OK
127.0.0.1:6379> config get tcp-keepalive
1) "tcp-keepalive"
2) "60"
127.0.0.1:6379> config set timeout 300
OK
127.0.0.1:6379> config get timeout
1) "timeout"
2) "300"
127.0.0.1:6379>

使用redis-cli从其他服务器远程连接这个redis实例(从其他服务器便于观察)

# 其他服务器 10.4.7.1 redis-cli 连接

 ~ % /Users/domino/redis/redis-3.2.3/src/redis-cli -h 10.4.7.106 -p 6379

# redis实例服务器 通过client list命令查看客户端连接

127.0.0.1:6379> client list
id=44 addr=127.0.0.1:37536 laddr=127.0.0.1:6379 fd=8 name= age=369 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1

id=45 addr=10.4.7.1:55544 laddr=10.4.7.106:6379 fd=9 name= age=142 idle=142 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=20496 events=r cmd=command user=default redir=-1

# 可以看到一个连接是本机redis-cli连接,另一个是其他服务器的连接

通过netstat命令观察连接情况

[root@redis-7-106 ~]# netstat -nap | egrep -i 6379 | egrep -i \.7\.1\:
tcp        0      0 10.4.7.106:6379         10.4.7.1:55544          ESTABLISHED 10083/./redis-serve

通过tcpdump查看

# 先通过ifconfig查看网卡,可见使用的是ens33
[root@redis-7-106 logs]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.106  netmask 255.255.252.0  broadcast 10.4.7.255
        inet6 fe80::f002:29f9:88c3:a1a2  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:54:70:ec  txqueuelen 1000  (Ethernet)
        RX packets 27209007  bytes 15499242089 (14.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23136520  bytes 2780588807 (2.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 使用tcpdump 查看 tcp端口6379的往来通信,这里我把redis-server 的tcp-keepalive配置改为了5秒,所以交互很频繁,说明tcp-keepalive生效。
[root@redis-7-106 ~]# tcpdump -nei ens33 "tcp port 6379"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
# 可以看到 redis-server向 10.4.7.1的客户端发送心跳检测
17:05:07.673530 00:0c:29:54:70:ec > fa:ff:c2:d5:49:64, ethertype IPv4 (0x0800), length 66: 10.4.7.106.6379 > 10.4.7.1.56667: Flags [.], ack 250714536, win 227, options [nop,nop,TS val 68425312 ecr 2278728736], length 0
# 10.4.7.1客户端向 redis-server进行返回
17:05:07.673882 fa:ff:c2:d5:49:64 > 00:0c:29:54:70:ec, ethertype IPv4 (0x0800), length 66: 10.4.7.1.56667 > 10.4.7.106.6379: Flags [.], ack 1, win 2058, options [nop,nop,TS val 2278733740 ecr 68415295], length 0
…………

在客户端空闲超过timeout配置设置的300秒以后,查看client list,可以看到空闲的远程客户端已经被不在了。tcpdump也不会有新的结果展示。说明timeout参数也生效了。

[root@redis-7-106 logs]# netstat -naplo | egrep -i 6379 | egrep -i \.7\.1\:
[root@redis-7-106 ~]# tcpdump -nei ens33 "tcp port 6379"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
[root@redis-7-106 logs]# redis-cli -p 6379
127.0.0.1:6379> client list
id=99 addr=127.0.0.1:37546 laddr=127.0.0.1:6379 fd=8 name= age=356 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1

redis server 可以断开 KA 丢失的连接或空闲的连接。这将使 Redis服务免受 TCP 连接耗尽问题的影响。

参考文档:https://supportportal.juniper.net/s/article/Contrail-How-to-turn-on-TCP-KA-keepalive-and-idle-timeout-for-redis-server?language=en_US文章来源地址https://www.toymoban.com/news/detail-553915.html

到了这里,关于Redis配置tcp-keepalive和timeout参数测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux内核源码剖析之TCP保活机制(KeepAlive)

    版本信息: Linux内核2.6.24(大部分centos、ubuntu应该都在3.1+。但是2.6的版本比较稳定,后续版本本质变化也不是很大) ipv4 协议 https://blog.csdn.net/ComplexMaze/article/details/124201088 本文使用案例如上地址,感谢案例的分享,本篇文章核心部分还是在Linux内核源码分析~ 为什么写下这

    2024年02月12日
    浏览(38)
  • SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、保活包

    SO_KEEPALIVE 是一个套接字选项,用于设置是否启用 keepalive 机制。在这段代码中没有涉及到 SO_KEEPALIVE 选项的设置。 当 SO_KEEPALIVE 被设置为非零值时,表示启用 keepalive 机制。keepalive 是一种用于检测连接是否仍然有效的机制。通过定期发送一些特定的探测数据,可以检测到网络

    2024年02月14日
    浏览(29)
  • 详解TCP、HTTP中的保活机制 | Keepalive和Keep-Alive

    目录 🌲 HTTP 的 Keep-Alive 🌲 TCP 的 Keepalive 🌲 最后总结 🌲 参考资料 TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上去太像了,很容易误以为是同一个东西。 事实上, 这两个完全是两样不同东西 ,实现的层面也

    2024年02月12日
    浏览(30)
  • linux服务TCP参数配置

    阿里云规范 1.【推荐】高并发服务器建议调小 TCP 协议的 time_wait 超时时间。 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。 正例:

    2024年02月11日
    浏览(42)
  • 4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?

    目录 HTTP 的 Keep-Alive TCP 的 Keepalive 总结: HTTP的Keep-Alive,是应用层(用户态)实现的,称为HTTP长连接; TCP的Keepalive,是由TCP层(内核态)实现的,称为TCP保活机制。 HTTP协议采用的是 请求-应答 模式,客户端发起请求,服务端返回响应,一来一回。 Keep-Alive 就是实现了可以使

    2024年02月11日
    浏览(30)
  • wait_timeout and interactive_timeout 参数

    非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过传递MYSQL_CLIENT_INTERACTIVE常量给mysql_connect()函数即可开启连接的交互模式。wait_timeout参数控制非交互模式连接的超时时间(单位秒,默认值为24小时即

    2024年02月08日
    浏览(27)
  • TCP报文与三次握手四次断开、TCP最大连接数与文件打开数限制、keepalive、tcpdump、wireshark抓包分析工具

    tcp详解、tcp与udp对比等 TCP:传输控制协议 UDP:用户数据报协议 源端口和目的端口字段:各占 2 字节(16位)。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接

    2024年04月22日
    浏览(35)
  • windows启动Redis报错: Could not create server TCP listening socket *:6379: listen: 提供了一个无效的参数

    问题: windows系统,redis一直正常使用,早上重启电脑后,点击redis-server闪一下无法启动。  使用命令行启动报如下错:  网上查找解决方案: 1、多数文章提示的思路都是 6379 端口 被占用,找到相应进程然后 kill 该进程,用 netstat -aon|findstr \\\"6379\\\" ,没有找到占用该端口的进程

    2024年01月24日
    浏览(41)
  • Flannel dial tcp X.X.X.X i/o timeout

    E0826 15:59:20.782550       1 main.go:229] Failed to create SubnetManager: error retrieving pod spec for \\\'kube-flannel/kube-flannel-ds-k79vs\\\': Get \\\"https://10.0.0.1:443/api/v1/namespaces/kube-flannel/pods/kube-flannel-ds-k79vs\\\": dial tcp 10.0.0.1:443: i/o timeout  这种报错一般是 集群网段设置错误造成的 查看kube-flannel.yaml   step1 检查

    2024年02月11日
    浏览(26)
  • docker 安装redis并设置密码,及nacos中配置redis参数。

    (123456 就是你设置的密码,,暴露端口号为6379 3.备注.为现有的redis 创建密码或修改密码:  进入redis的容器 docker exec -it 容器ID bash 进入redis目录 cd /usr/local/bin 运行命令:redis-cli 查看现有的redis 密码:config get requirepass 设置redis密码config set requirepass ***(***为你要设置的密码

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包