redis 連接工具_redis之timeout(默認建議為0) , maxclients(重要)


 

 

 

redis client連接數過多,大量空閑連接無法釋放

 

redis client list 查看連接數

相關參數解釋

參考官網:

Redis CLIENT LIST命令用於返回所有連接到服務器的客戶端信息和統計數據。

返回值
bulk-string-reply: 一個獨特的字符串,格式如下:

每個已連接客戶端對應一行(以 LF 分割)
每行字符串由一系列 屬性=值(property=value) 形式的域組成,每個域之間以空格分開。
下面是各字段的含義::

id: 唯一的64位的客戶端ID(Redis 2.8.12加入)。 addr: 客戶端的地址和端口 fd: 套接字所使用的文件描述符 age: 以秒計算的已連接時長 idle: 以秒計算的空閑時長 flags: 客戶端 flag db: 該客戶端正在使用的數據庫 ID sub: 已訂閱頻道的數量 psub: 已訂閱模式的數量 multi: 在事務中被執行的命令數量 qbuf: 查詢緩沖區的長度(字節為單位, 0 表示沒有分配查詢緩沖區) qbuf-free: 查詢緩沖區剩余空間的長度(字節為單位, 0 表示沒有剩余空間) obl: 輸出緩沖區的長度(字節為單位, 0 表示沒有分配輸出緩沖區) oll: 輸出列表包含的對象數量(當輸出緩沖區沒有剩余空間時,命令回復會以字符串對象的形式被入隊到這個隊列里) omem: 輸出緩沖區和輸出列表占用的內存總量 events: 文件描述符事件 cmd: 最近一次執行的命令 

優化方案

  • 1,通過ip排查對應的service服務,查看是否可以進行優化。
  • 2,config get timeout
    命令查看空閑超時時間
    0 默認不開啟
  • 3,config set timeout 60   //建議為0,有用分布式鎖的情況下,看業務場景
    配置默認空閑超時時間為60s
  • 4,config rewrit 保存
    可在redis.conf 配置文件中添加重啟生效。

最近在遷移redis集群,至於數據就是通過之前說的redis-migrate-tool工具做的同步遷移,遷移完成后,程序也修改了redis連接地址,但是redis服務端連接卻沒有釋放,這個問題就是因為redis默認timeout沒有做修改,無論連接是否空閑,長期保持連接狀態。

下面是檢查配置步驟:

登陸redis集群

[root@db-2-19 ~]# redis-cli -h 127.0.0.1 -p 1000 -c10.10.2.19:1000> auth 123456

查看redis的配置timeout(當客戶端閑置多長時間后關閉連接,如果指定為0,表示關閉該功能)

127.0.0.1:1000> config get timeout 

配置超時

127.0.0.1:1000> config set timeout 0 //默認

查看連接狀態

[root@db-2-19 ~]# lsof -i:1000[root@db-2-19 ~]# netstat -antp | grep 1000

注:如果是集群模式,那么每個節點都得需要修改。

 

##redis客戶端連接數

 redis通過監聽一個TCP端口或socket的方式接收來自客戶端的連接,
當與客戶端建立連接后,redis內部會進行如下操作:
(1)客戶端socket會被設置為非阻塞模式,因為redis在網絡時間處理上采用的是非阻塞多路復用模型;
(2)然后為這個socket設置TCP_NODELAY屬性,禁用Nagle算法;
(3)然后創建一個可讀的文件事件用於監聽這個客戶端socket的數據發送。

##redis連接數與最大連接數

1.查看

復制代碼
方法1:在redis-cli命令行使用:info clients可以查看當前的redis連接數

127.0.0.1:6379> info clients
#Clients
connected_clients:621
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>

方法2:config get maxclients 可以查詢redis允許的最大連接數

127.0.0.1:6379> CONFIG GET maxclients
    ##1) "maxclients"
    ##2) "10000"
127.0.0.1:6379>
復制代碼

 2.設置、修改

復制代碼
1. 在2.6之后版本,可以修改最大連接數配置,默認10000,可以在redis.conf配置文件中修改
... # maxclients 10000 ... 2.config set maxclients num 可以設置redis允許的最大連接數 127.0.0.1:6379> CONFIG set maxclients 10 OK 127.0.0.1:6379> 3.啟動redis.service服務時加參數--maxclients 100000來設置最大連接數限制 redis-server --maxclients 100000 -f /etc/redis.conf
復制代碼

 

##redis-cli命令控制行中獲取客戶端信息命令

CLIENT LIST獲取客戶端列表

CLIENT SETNAME    設置當前連接點redis的名稱

CLIENT GETNAME    查看當前連接的名稱

CLIENT KILL ip:port    殺死指定連接

復制代碼
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 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
CLIENT SETNAME js
    ##OK
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 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
CLIENT GETNAME
    ##"js"
CLIENT KILL id 3
    ##(integer) 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM