linux统计reids集群的连接数

152 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

背景

为排查redis集群连接数主要在哪台机器上,需要对机器地址进行统计计数。此时借助linux命令进行获取。

1. 登录redis服务器,并执行命令

redis-cli client list|awk '{print $2}'|awk -F ':' '{print $1}'|sort -k 1 |uniq -c|sort -k 1 -nr

image.png

2. 命令参数解释

  • redis-cli client list 该命令为查询redis的客户端连接信息

image.png 其对应的解释可参考

  • awk '{print $2}'
id=6043422 addr=127.0.0.1:65440 laddr=127.0.0.1:6379 fd=76 name= age=3 idle=3 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=ping user=default redir=-1

该命令用来对上述输出结果以空格分割,然后输出第二列数据,即 'addr=127.0.0.1:65440'.

  • awk -F ':' '{print $1}' 该命令用来对 'addr=127.0.0.1:65440' 以":"分割,然后输出第一列数据,即 'addr=127.0.0.1'.
    -F参数表示列的分割符,这里文本是用逗号作为分割列的,如果不写默认是空格。$1表示第一列,这里要注意的是,不是从0开始计数的,0代表完整的一行,这与正则表达式group(0)类似。

  • sort -k 1 sort 的-k与-t参数配合使用,指定排序的关键字

  • uniq -c 对邻近重复的行进行统计,并删除重复的行

  • sort -k 1 -nr 到了uniq这步以完成了每个addr的次数统计,但是没有按照次数降序排序。因此再次使用sort,其中参数-k 1代表以第一列值作为排序的依据

题外话

在使用awk命令时,还可添加判断条件,比如要取某列大于10的列,可写成

awk '{if($1>10) {print $1}}'

以个人目前的认知觉得,基本上sql语句能做到的事,linux命令也能够做到。