概念說明
活躍連接是指當下正在執行命令的連接,非活躍當然是相對的。
在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端口
結果展示如下:
工具代碼如下
#!/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-control=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