管理連接redis server的客戶端

一、redis server管理連接redis客戶端的命令

1、查看與redis服務端相連的所有客戶端的連接信息

   查看命令:client list

# 查看連接當前redis的所有客戶端
127.0.0.1:6379> CLIENT list 
id=3 addr=127.0.0.1:35878 fd=5 name= age=75 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
id=4 addr=192.168.16.128:48120 fd=6 name= age=68 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=30 omem=529848 events=r cmd=keys
id=5 addr=192.168.16.128:48124 fd=7 name= age=51 idle=48 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=keys
id=6 addr=127.0.0.1:35880 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL

客戶端信息說明:

(1)客戶的基本標識信息

    id:客戶端連接的唯一標識,這個id隨着redis的連接自增的,重啓redis後重置爲0

    add:客戶端連接的ip和端口

    fd:socket的文件描述符

    name:客戶端的名字,可以更改

(2)輸入緩存區信息:qbuf(總容量)、qbuf-free(剩餘容量)

    輸入緩存區的作用是將客戶端發送的命令臨時保存,redis會從輸入緩存區拉取命令並執行,輸入緩存取得大小會根據輸入內容的大小不同動態調整,但會要求每個客戶端的大小不能超過1g,超過後客戶端將被關閉。

輸入緩存區的監控與優化:

    輸入緩存區大小不受maxmemory,如果輸入緩存區加redis使用的內存大小超過了maxmemory的限制可能會導致數據丟失、鍵值淘汰、OOM情況的發生。對此可以監控輸入緩存區。

    監控命令:client list

             Info clients

# 使用info監控clients, client_biggest_input_buf代表最大的輸入緩存區
127.0.0.1:6379> INFO clients
# Clients
connected_clients:4
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

(3)輸出緩存區:obl(固定緩存區長度)、oll(動態緩存區長度)、omem(使用的字節數)

     輸出緩存區的作用是保存命令執行的結果返回給客戶端、爲redis和客戶端交互返回結果提供緩存。相對於輸入緩存區,輸出緩存區的大小可以設置(通過參數cllient-output-buffer-limit設置);輸出緩存區的客戶端分爲三種(普通客戶端、發佈訂閱客戶端、slave客戶端)。

     輸出緩存區由固定輸出緩存區(爲16kb,返回比較小的執行結果,使用的是字節數組)和動態緩存區(返回大的結果,使用的事列表)組成,固定緩存區慢後會將redis新的返回結果存放在動態緩存區的隊列中,隊列中的每個對象就是每個返回結果。

     輸出緩存區的監控同輸入緩存區,其中” client_longest_output_list”代表輸出緩存區列表最大的對象數。

(4)客戶端的存活狀態

     age:客戶端連接時間

     idle:客戶端最近一次空閒時間。

(5)客戶端的類型

    Flag用於表示當前客戶端的類型,常見的客戶端類型如下:

       N:普通客戶端

       M:當前客戶端是master節點

       S:當前客戶端是slave節點

       o:當前客戶端正在執行monitor命令

       x:當前客戶端正在執行事務

       b:當前客戶端正在等待阻塞事件

       u:客戶端未被阻塞

       c:回覆完整輸出後,關閉連接

       A:儘可能快的關閉連接

(6)其他的參數說明

    db:當前客戶端正在使用的數據庫的索引下標

    multi:當前事務中已執行命令個數

    events:文件描述符事件,r和w分別代表客戶端套接字可讀和可寫

    cmd:當前客戶端最後一次執行的命令

2、獲取連接客戶端的名稱和修改客戶端的名稱

    修改連接客戶端的名稱:CLIENT SETNAME

    獲取連接客戶端的名臣:CLIENT GETNAME

# 修改當前連接的客戶端的名稱
192.168.16.129:6379> CLIENT SETNAME dayi123
OK
# 獲取當前連接的客戶端的連接
192.168.16.129:6379> CLIENT GETNAME
"dayi123"

3、殺死連接的客戶端

    命令:CLIENT KILL

# 殺死客戶端127.0.0.1:3587
192.168.16.129:6379> CLIENT KILL 127.0.0.1:35878
OK

4、阻塞客戶端

    命令:CLIENT PAUSE timeout(毫秒)

# 阻塞客戶端10秒
192.168.16.129:6379> CLIENT PAUSE 10000
OK

    Clinet pause只對普通和發佈訂閱客戶端有效,對於主從複製是無效的。

5、監控redis正在執行的命令

    命令:MONITOR

# 監控redis正在執行的命令
192.168.16.129:6379> MONITOR
OK
1532152182.921718 [0 127.0.0.1:35880] "ping"
1532152189.738998 [0 127.0.0.1:35880] "DBSIZE"

二、redis服務對客戶端連接的相關配置

1timeout

    檢測客戶端空閒連接的超時時間,默認timeout=0。

2maxclients

    客戶端最大的連接數,默認爲10000

3tcp-keepalive

    檢測tcp連接活性的週期,默認值爲0,建議設置爲60,redis會在設定的時期內對它創建的tcp進行活性的檢測,防止大量的連接佔用系統資源。

4tcp-backlog

    用來設置tcp連接隊列的大小,默認值爲511,這個參數會受到操作系統的影響。

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