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端口

結果展示如下:

工具代碼如下

#!/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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章