參考:
https://www.jianshu.com/p/70f3b68a7fd7redis
redis 鏈接的屬性
id=437332863 addr=10.59.72.159:60339 fd=1728 name= age=11 idle=11 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=del
id=369651758 addr=10.28.85.47:49508 fd=4040 name= age=2111614 idle=2111613 flags=N db=4 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=select運維
redis client命令輸出的是每一行表明一個客戶端的信息,每行包含10多個屬性。socket
id ·id:客戶端鏈接的惟一標識,這個id是隨着Redis的鏈接自增的,重啓Redis後會重置爲0。ide
·addr:客戶端鏈接的ip和端口。ui
·fd:socket的文件描述符,與lsof命令結果中的fd是同一個(能夠看到鏈接的狀態),若是fd=-1表明當前客戶端不是外部客戶端,而是Redis內部的假裝客戶端。對象
·name:客戶端的名字,後面的client setName(客戶端執行設置我這個鏈接的名字)和client getName(能夠查看客戶端設置的名字)兩個命令會對其進行說明。ip
2)輸入緩衝區:qbuf、qbuf-free
Redis爲每一個客戶端分配了輸入緩衝區,它的做用是將客戶端發送的命令臨時保存,同時Redis從會輸入緩衝區拉取命令並執行,輸入緩衝區爲客戶端發送命令到Redis執行命令提供了緩衝功能,如圖4-5所示。
client list中qbuf和qbuf-free分別表明這個緩衝區的總容量和剩餘容量,Redis沒有提供相應的配置來規定每一個緩衝區的大小,輸入緩衝區會根據輸入內容大小的不一樣動態調整,只是要求每一個客戶端緩衝區的大小不能超過1G,超事後客戶端將被關閉資源
(3)輸出緩衝區:obl、oll、omem開發
Redis爲每一個客戶端分配了輸出緩衝區,它的做用是保存命令執行的結果返回給客戶端,爲Redis和客戶端交互返回結果提供緩衝,如圖4-7所示。
與輸入緩衝區不一樣的是,輸出緩衝區的容量能夠經過參數client-output-buffer-limit來進行設置,而且輸出緩衝區作得更加細緻,按照客戶端的不一樣分爲三種:普通客戶端、發佈訂閱客戶端、slave客戶端,如圖4-8所示。get
應的配置規則是:
client-output-buffer-limit
和輸入緩衝區相同的是,輸出緩衝區也不會受到maxmemory的限制,若是使用不當一樣會形成maxmemory用滿產生的數據丟失、鍵值淘汰、OOM等狀況。
(4)客戶端的存活狀態
client list中的age和idle分別表明當前客戶端已經鏈接的時間和最近一次的空閒時間
當城市// 5) 關閉jedis鏈接 jedis.close(); 或者redis-cli中使用quit退出後,鏈接消失(被關閉了)
Redis默認的timeout是0,也就是不會檢測客戶端的空閒 127.0.0.1:6379> config set timeout 30
和通常來講maxclients=10000在大部分場景下已經絕對夠用,可是業務繁忙的時候會有問題。
Redis的默認配置給出的timeout=0,在這種狀況下客戶端基本不會出現上面的異常,這是基於對客戶端開發的一種保護。例如不少開發人員在使用JedisPool時不會對鏈接池對象作空閒檢測和驗證,若是設置了timeout>0,可能就會出現上面的異常,對應用業務形成必定影響,可是若是Redis的客戶端使用不當或者客戶端自己的一些問題,形成沒有及時釋放客戶端鏈接,可能會形成大量的idle鏈接佔據着不少鏈接資源,一旦超過maxclients;後果也是不堪設想。所在在實際開發和運維中,須要將timeout設置成大於0,例如能夠設置爲300秒,同時在客戶端使用上添加空閒檢測和驗證等等措施
(6)客戶端類型
client list中的flag是用於標識當前客戶端的類型,例如flag=S表明當前客戶端是slave客戶端、flag=N表明當前是普通客戶端,flag=O表明當前客戶端正在執行monitor命令,表4-4列出了11種客戶端類型。
3.client kill
client kill ip:port