redis连接⼯具_redis之timeout,maxclients⼩细节
redis client list 查看连接数
相关参数解释
Redis CLIENT LIST命令⽤于返回所有连接到服务器的客户端信息和统计数据。
返回值
bulk-string-reply: ⼀个独特的字符串,格式如下:
每个已连接客户端对应⼀⾏(以 LF 分割)
每⾏字符串由⼀系列属性=值(property=value)形式的域组成,每个域之间以空格分开。
下⾯是各字段的含义::
id: 唯⼀的64位的客户端ID(Redis 2.8.12加⼊)。
addr: 客户端的地址和端⼝
fd: 套接字所使⽤的⽂件描述符
age: 以秒计算的已连接时长
idle: 以秒计算的空闲时长
flags: 客户端 flag
db: 该客户端正在使⽤的数据库 ID
sub: 已订阅频道的数量
psub: 已订阅模式的数量
multi: 在事务中被执⾏的命令数量
qbuf: 查询缓冲区的长度(字节为单位, 0 表⽰没有分配查询缓冲区)
qbuf-free: 查询缓冲区剩余空间的长度(字节为单位, 0 表⽰没有剩余空间)
obl: 输出缓冲区的长度(字节为单位, 0 表⽰没有分配输出缓冲区)
oll: 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被⼊队到这个队列⾥)
omem: 输出缓冲区和输出列表占⽤的内存总量
events: ⽂件描述符事件
cmd: 最近⼀次执⾏的命令
优化⽅案
1,通过ip排查对应的service服务,查看是否可以进⾏优化。
2,config get timeout
命令查看空闲超时时间
0 默认不开启
3,config set timeout 60
配置默认空闲超时时间为60s
4,config rewrit 保存
可在f 配置⽂件中添加重启⽣效。
最近在迁移redis集,⾄于数据就是通过之前说的redis-migrate-tool⼯具做的同步迁移,迁移完成后,程序也修改了redis连接地址,但是redis服务端连接却没有释放,这个问题就是因为redis默认timeout没有做修改,⽆论连接是否空闲,长期保持连接状态。
下⾯是检查配置步骤:
登陆redis集
[root@db-2-19 ~]# redis-cli -h 127.0.0.1 -p 1000 -c10.10.2.19:1000> auth 123456
查看redis的配置timeout(当客户端闲置多长时间后关闭连接,如果指定为0,表⽰关闭该功能)
127.0.0.1:1000> config get timeout
配置超时
127.0.0.1:1000> config set timeout 0
查看连接状态
[root@db-2-19 ~]# lsof -i:1000[root@db-2-19 ~]# netstat -antp | grep 1000
注:如果是集模式,那么每个节点都得需要修改。
##redis客户端连接数
redis通过监听⼀个TCP端⼝或socket的⽅式接收来⾃客户端的连接,
当与客户端建⽴连接后,redis内部会进⾏如下操作:
(1)客户端socket会被设置为⾮阻塞模式,因为redis在⽹络时间处理上采⽤的是⾮阻塞多路复⽤模型;
(2)然后为这个socket设置TCP_NODELAY属性,禁⽤Nagle算法;
(3)然后创建⼀个可读的⽂件事件⽤于监听这个客户端socket的数据发送。
##redis连接数与最⼤连接数
1.查看
⽅法1:在redis-cli命令⾏使⽤:info clients可以查看当前的redis连接数
127.0.0.1:6379> info clients
#Clients
connected_clients:621
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>
⽅法2:config get maxclients 可以查询redis允许的最⼤连接数
127.0.0.1:6379> CONFIG GET maxclients字符串长度统计工具
##1) "maxclients"
##2) "10000"
127.0.0.1:6379>
2.设置、修改
1. 在
2.6之后版本,可以修改最⼤连接数配置,默认10000,可以在f配置⽂件中修改
...
# maxclients 10000
...
127.0.0.1:6379> CONFIG set maxclients 10
OK
127.0.0.1:6379>
3.启动redis.service服务时加参数--maxclients 100000来设置最⼤连接数限制
redis-server --maxclients 100000 -f /f
##redis-cli命令控制⾏中获取客户端信息命令
CLIENT LIST获取客户端列表
CLIENT SETNAME    设置当前连接点redis的名称
CLIENT GETNAME    查看当前连接的名称
CLIENT KILL ip:port    杀死指定连接
CLIENT LIST
##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client CLIENT SETNAME js
##OK
CLIENT LIST
##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client CLIENT GETNAME
##"js"
CLIENT KILL id 3
##(integer) 0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。