亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > 管理維護 > 正文

Redis處理客戶端連接的一些內部實現機制

2024-09-10 14:19:06
字體:
來源:轉載
供稿:網友

本文主要介紹了 Redis 處理客戶端連接的一些內部實現機制,包括連接處理、超時、緩沖區等一系列內容。

注:本文所述內容基于 Redis2.6 及以上版本。

連接的建立

Redis 通過監聽一個 TCP 端口或者 Unix socket 的方式來接收來自客戶端的連接,當一個連接建立后,Redis 內部會進行以下一些操作:

  • 首先,客戶端 socket 會被設置為非阻塞模式,因為 Redis 在網絡事件處理上采用的是非阻塞多路復用模型。
  • 然后為這個socket 設置 TCP_NODELAY 屬性,禁用 Nagle 算法
  • 然后創建一個 readable 的文件事件用于監聽這個客戶端 socket 的數據發送

當客戶端連接被初始化后,Redis 會查看目前的連接數,然后對比配置好的 maxclients 值,如果目前連接數已經達到最大連接數 maxclients 了,那么說明這個連接不能再接收,Redis 會直接返回客戶端一個連接錯誤,并馬上關閉掉這個連接。

服務端處理順序

如果有多個客戶端連接上 Redis,并且都向 Redis 發送命令,那么 Redis 服務端會先處理哪個客戶端的請求呢?答案其實并不確定,主要與兩個因素有關,一是客戶端對應的 socket 對應的數字的大小,二是 kernal 報告各個客戶端事件的先后順序。

Redis 處理一個客戶端傳來數據的步驟如下:

  • 它對觸發事件的 socket 調用一次 read(),只讀一次(而不是把這個 socket 上的消息讀完為止),是為了防止由于某個別客戶端持續發送太多命令,導致其它客戶端的請求長時間得不到處理的情況。
  • 當然,當這一次 read() 調用完成后,它里面無論包含多少個命令,都會被一次性順序地執行。這樣就保證了對各個客戶端命令的公平對待。

關于最大連接數 maxclients

在 Redis2.4 中,最大連接數是被直接硬編碼在代碼里面的,而在2.6版本中這個值變成可配置的。maxclients 的默認值是 10000,你也可以在 redis.conf 中對這個值進行修改。

當然,這個值只是 Redis 一廂情愿的值,Redis 還會照顧到系統本身對進程使用的文件描述符數量的限制。在啟動時 Redis 會檢查系統的 soft limit,以查看打開文件描述符的個數上限。如果系統設置的數字,小于咱們希望的最大連接數加32,那么這個 maxclients 的設置將不起作用,Redis 會按系統要求的來設置這個值。(加32是因為 Redis 內部會使用最多32個文件描述符,所以連接能使用的相當于所有能用的描述符號減32)。

當上面說的這種情況發生時(maxclients 設置后不起作用的情況),Redis 的啟動過程中將會有相應的日志記錄。比如下面命令希望設置最大客戶端數量為100000,所以 Redis 需要 100000+32 個文件描述符,而系統的最大文件描述符號設置為10144,所以 Redis 只能將 maxclients 設置為 10144 – 32 = 10112。

$ ./redis-server --maxclients 100000
[41422] 23 Jan 11:28:33.179 # Unable to set the max number of files limit to 100032 (Invalid argument), setting the max clients configuration to 10112.

所以說當你想設置 maxclients 值時,最好順便修改一下你的系統設置,當然,養成看日志的好習慣也能發現這個問題。

具體的設置方法就看你個人的需求了,你可以只修改此次會話的限制,也可以直接通過sysctl 修改系統的默認設置。如:

ulimit -Sn 100000 # This will only work if hard limit is big enough.
sysctl -w fs.file-max=100000

輸出緩沖區大小限制

對于 Redis 的輸出(也就是命令的返回值)來說,其大小經常是不可控的,可能是一個簡單的命令,能夠產生體積龐大的返回數據。另外也有可能因為執行命令太多,產生的返回數據的速率超過了往客戶端發送的速率,這時也會產生消息堆積,從而造成輸出緩沖區越來越大,占用過多內存,甚至導致系統崩潰。

所以 Redis 設置了一些保護機制來避免這種情況的出現,這些機制作用于不同種類的客戶端,有不同的輸出緩沖區大小限制,限制方式有兩種:

  • 一種是大小限制,當某一個客戶端的緩沖區超過某一大小時,直接關閉掉這個客戶端連接
  • 另一種是當某一個客戶端的緩沖區持續一段時間占用空間過大時,也直接關閉掉客戶端連接

對于不同客戶端的策略如下:

  • 對普通客戶端來說,限制為0,也就是不限制,因為普通客戶端通常采用阻塞式的消息應答模式,如:發送請求,等待返回,再發請求,再等待返回。這種模式通常不會導致輸出緩沖區的堆積膨脹。
  • 對于 Pub/Sub 客戶端來說,大小限制是32m,當輸出緩沖區超過32m時,會關閉連接。持續性限制是,當客戶端緩沖區大小持續60秒超過8m,也會導致連接關閉。
  • 而對于 Slave 客戶端來說,大小限制是256m,持續性限制是當客戶端緩沖區大小持續60秒超過64m時,關閉連接。

上面三種規則都是可配置的??梢酝ㄟ^ CONFIG SET 命令或者修改 redis.conf 文件來配置。

輸入緩沖區大小限制

Redis 對輸入緩沖區大小的限制比較暴力,當客戶端傳輸的請求大小超過1G時,服務端會直接關閉連接。這種方式可以有效防止一些客戶端或服務端 bug 導致的輸入緩沖區過大的問題。

Client 超時

對當前的 Redis 版本來說,服務端默認是不會關閉長期空閑的客戶端的。但是你可以修改默認配置來設置你希望的超時時間。比如客戶端超過多長時間無交互,就直接關閉。同理,這也可以通過 CONFIG SET 命令或者修改 redis.conf 文件來配置。

值得注意的是,超時時間的設置,只對普通客戶端起作用,對 Pub/Sub 客戶端來說,長期空閑狀態是正常的。

另外,實際的超時時間可能不會像設定的那樣精確,這是因為 Redis 并不會采用計時器或者輪訓遍歷的方法來檢測客戶端超時,而是通過一種漸近式的方式來完成,每次檢查一部分。所以導致的結果就是,可能你設置的超時時間是10s,但是真實執行的時間是超時12s后客戶端才被關閉。

CLIENT 命令

Redis 的 CLIENT 命令能夠實現三種功能:檢查連接的狀態,殺掉某個連接以及為連接設置名字。

CLIENT LIST 命令能夠獲取當前所有客戶端的狀態,使用方法如下:

redis 127.0.0.1:6379> client list
addr=127.0.0.1:52555 fd=5 name= age=855 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
addr=127.0.0.1:52787 fd=6 name= age=6 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping

如上面命令的輸出可知,目前此 Redis 有兩個客戶端連接,每一行表示一個連接的各項信息:

  • addr: 客戶端的TCP地址,包括IP和端口
  • fd: 客戶端連接 socket 對應的文件描述符句柄號
  • name: 連接的名字,默認為空,可以通過 CLIENT SETNAME 設置
  • age: 客戶端存活的秒數
  • idle: 客戶端空閑的秒數
  • flags: 客戶端的類型 (N 表示普通客戶端,更多類型見 http://redis.io/commands/client-list)
  • omem: 輸出緩沖區的大小
  • cmd: 最后執行的命令名稱

你可以查看 CLIENT LIST 的文檔來具體查看所有輸出的含義。

當你通過上面命令獲取到客戶端列表后,就可以通過 CLIENT KILL 命令來殺死指定的連接了。CLIENT KILL 的參數就是上面的 addr 值。

如上面提到的 CLIENT SETNAME 和 CLIENT GETNAME 可以用來為一個連接設置一個名字。

參考來源:http://redis.io/topics/clients

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性视频精品| 亚洲一区二区免费在线| 热久久美女精品天天吊色| 亚洲欧美综合精品久久成人| 黄色成人在线免费| 日韩电影大全免费观看2023年上| 欧美激情三级免费| 91精品久久久久久久久| 欧美日韩亚洲91| 成人xxxxx| 国产一区视频在线播放| 国产精品午夜国产小视频| 国产日韩欧美在线看| 欧美日韩xxx| 日本不卡高字幕在线2019| 午夜精品久久久久久久白皮肤| 亚洲一区二区三区乱码aⅴ| 秋霞成人午夜鲁丝一区二区三区| 日韩欧美高清视频| 国产日韩精品入口| 欧美亚洲另类激情另类| 91网站免费看| 精品中文字幕在线观看| 欧美成人精品在线| 国产成人精品免费视频| 亚洲xxxx视频| 亚洲国产99精品国自产| 性色av一区二区三区在线观看| 夜色77av精品影院| 精品久久久久久中文字幕一区奶水| 亚洲欧美日韩国产中文| 一区二区三区无码高清视频| 91美女片黄在线观看游戏| www国产亚洲精品久久网站| 91成人天堂久久成人| 日本一区二区不卡| 亚洲国产中文字幕在线观看| 国产日本欧美在线观看| 97色在线视频观看| 亚洲最大av网| 欧美激情视频在线| 高清日韩电视剧大全免费播放在线观看| 亚洲第一天堂av| 日韩精品视频免费在线观看| 亚洲国产精品推荐| 91在线免费网站| 亚洲第一天堂无码专区| 欧美激情奇米色| 亚洲综合国产精品| 亚洲欧美一区二区三区在线| 日韩中文字幕视频在线观看| 成人网址在线观看| 欧美视频在线观看免费| 精品亚洲一区二区三区在线播放| 国产91精品久久久| 国产欧美婷婷中文| www.亚洲成人| 亚洲第一网站男人都懂| www.99久久热国产日韩欧美.com| 91色视频在线观看| 在线观看日韩视频| 国产精品www| 欧美精品18videos性欧| 日韩欧美在线免费观看| 美日韩丰满少妇在线观看| 国产欧美久久久久久| 美女视频久久黄| 2019中文字幕在线免费观看| 精品国产一区二区三区久久狼5月| 亚洲天堂第一页| 久久香蕉精品香蕉| 91精品国产91久久久| 久久综合伊人77777尤物| 欧洲s码亚洲m码精品一区| 久久久免费av| 精品日本高清在线播放| 91超碰caoporn97人人| 亚洲欧美一区二区三区在线| 色偷偷av一区二区三区| 久久av中文字幕| 欧美一区二区影院| 欧美日在线观看| 青草青草久热精品视频在线网站| 国产亚洲一区二区精品| 日韩精品欧美国产精品忘忧草| 日韩欧美a级成人黄色| 国产精品久久久久久搜索| 91日韩在线播放| 日韩精品一区二区三区第95| 91视频8mav| 国产日产久久高清欧美一区| 欧美在线一级视频| 欧美一区第一页| 欧美亚洲在线观看| 国产精品男女猛烈高潮激情| 国产精品av在线| 国产成人精品网站| 久久久视频精品| 人九九综合九九宗合| 色综合久久悠悠| 亚洲性无码av在线| 欧美超级乱淫片喷水| 国产成人精品在线视频| 成人性生交大片免费观看嘿嘿视频| 91久久国产精品91久久性色| 川上优av一区二区线观看| 久久精品国产精品亚洲| 7m第一福利500精品视频| 国产成人精品av在线| 久久久亚洲天堂| 国产精品吴梦梦| 欧美成人剧情片在线观看| 欧美日本啪啪无遮挡网站| 欧美亚洲国产视频| 久久精品国产视频| 久久久精品国产亚洲| 亚洲美女www午夜| 中文字幕欧美国内| 色多多国产成人永久免费网站| 国产欧美精品xxxx另类| 精品福利樱桃av导航| 原创国产精品91| 欧美日韩国产色视频| 国产精品18久久久久久首页狼| 日韩av影院在线观看| 亚洲免费av片| 亚洲色图18p| 日韩免费观看在线观看| 最近中文字幕mv在线一区二区三区四区| 亚洲男人天天操| 欧美成人网在线| 91精品国产91久久久久| 国产欧美一区二区三区在线| 一区二区亚洲欧洲国产日韩| 国产成人高清激情视频在线观看| 91人人爽人人爽人人精88v| 欧美成年人在线观看| 尤物99国产成人精品视频| 国产精品第七影院| 96sao精品视频在线观看| 97人人模人人爽人人喊中文字| 日韩一级黄色av| 欧美激情视频在线观看| 欧美精品在线第一页| 亚洲性生活视频在线观看| 成人a视频在线观看| 91国产美女视频| 日韩日本欧美亚洲| 欧美黄色片免费观看| 国产精品香蕉在线观看| 亚洲日本中文字幕| 欧美精品在线第一页| 国产91在线播放精品91| 亚洲国产一区自拍| 91精品视频免费观看| 97国产精品视频| 久久色在线播放| 91视频免费在线| 国产亚洲精品成人av久久ww| 欧美电影免费观看网站| 久久中文久久字幕| 久久久久久91香蕉国产| 欧美一区深夜视频| 亚洲精品永久免费精品|