6

redis活跃非活跃连接数统计及client list说明

 1 year ago
source link: https://blog.51cto.com/colinspace/5916288
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

redis活跃非活跃连接数统计及client list说明

精选 原创
  • 活跃连接是指当下正在执行命令的连接,非活跃当然是相对的。
  • 在redis中判断当前连接是否活跃是通过 内置的​​client list​​ 命令输出中的idle来判断

client list字段说明

(kfzops) [root@test-xxx-01-vm ]# redis-cli -h r-xxxxxxxxxxxx.redis.rds.aliyuncs.com
r-xxxxxxxxxxxx.redis.rds.aliyuncs.com:6379> client list
id=1106439 addr=172.16.0.2:48012 fd=17 name= age=354261 idle=2 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=20504 events=r traffic-control=NULL cmd=info user=default type=vpc real_addr=
  • addr 是指连接到redis实例的客户端地址和端口
  • fd 套接字所使用的文件描述符
  • name 客户端名称,目前发现都是为空
  • age 已连接时长,单位为秒(s)
  • idle 空闲时长,单位为秒(s)
  • flags 客户端flag,详细说明参考后续 《客户端标志取值说明》
  • db 客户端正在使用的数据库ID
  • sub 频道订阅数量
  • psub 模式匹配的订阅数量
  • multi MULTI/EXEC上下文中的命令数
  • qbuf 输入缓冲区大小,单位为字节(Byte),0 表示没有分配查询缓冲区 : 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)
  • qbuf-free 输入缓冲区剩余大小,单位为字节(Byte), 0 表示没有剩余空间
  • obl : 输出固定缓冲区大小,单位为字节(Byte), 0 表示没有分配输出缓冲区
  • oll : 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
  • omem : 输出缓冲区大小,单位为字节(Byte), 0 表示没有剩余空间
  • events 文件描述符事件
  • r:客户端套接字在事件Loop中可读。
  • w:客户端套接字在事件Loop中可写。
  • cmd 最近一次执行的命令

客户端标志取值说明:

A:尽快关闭连接。

b:客户端正在等待阻塞事件。

c:写入全部回复后将关闭连接。

d:受监视的键已被修改,EXEC命令将失败。

i:客户端正在等待虚拟机I/O操作(已废弃)。

M:客户端是主节点。

N:未设置特点标志。

O:处于监视模式的客户端。

r:客户端是只读模式的集群节点。

S:客户端是一般模式下的从节点。

u:客户端未被阻塞。

U:通过Unix域套接字连接的客户端。

x:客户端正在执行事务。

这里也提供一个工具脚本, 支持密码和非标准的6379端口

结果展示如下:

redis活跃非活跃连接数统计及client list说明_printf

工具代码如下

#!/usr/bin/env bash
# encoding: utf-8
#

host=""
port=""
password=""

# 没有参数则输出用法提示
if [ $# -eq 0 ]
then
echo -e "Usage:\n\t$0 host [port] [password]"
exit 0
fi

# host/port/password
if [ $# -eq 3 ]
then
host=$1
port=$2
password=$3
# host/port
elif [ $# -eq 2 ]
then
host=$1
port=$2
# host and port is 6379
else
host=$1
port=6379
fi
# 使用 redis-cli的绝对路径
cmd=$(which redis-cli)
if [ "x$password" == "x" ]
then
check_url="$cmd -h $host -p $port client list"
else
check_url="$cmd -h $host -p $port -a $password client list"
fi

# 阿里云 Redis的 client list 记录Demo
# id=1106452 addr=172.16.2.2:48038 fd=20 name= age=354237 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=66560 events=r traffic-cnotallow=NULL cmd=hmget user=default type=vpc real_addr=

printf "%-35s| %-19s| %-19s| %-10s| %-20s| %-16s| %-16s|%s\n" 客户端连接地址 已连接时长 空闲时长 客户端flag db 订阅 事件 命令
$check_url |awk '{printf "%-28s| %-14s| %-14s| %-14s| %-14s| %-14s| %-14s|%s\n", $2, $5, $6, $7, $8, $9, $19, $21}'

参考地址:

1、​ ​https://help.aliyun.com/document_detail/454164.htm?spm=a2c4g.11186623.0.0.529932b8acNZq8#main-107864​

  • 1
  • 1收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK