Memcached原始碼分析 命令解析(3)

2021-08-28 12:11:09 字數 1089 閱讀 1384

#1 流程圖

1 當進入到conn_read狀態後,會呼叫try_read_network(),將socket資料讀取到conn的rbuf中。

例如:char *rbuf = 『set key 0 0 4\r\nget name\r\n』。

2 然後進入到conn_parse_cmd狀態,呼叫try_read_command()方法

3 當前指標char *rcurr = rbuf。位址指到了字元開始的位址。

4 el = memchr(c->rcurr, 『\n』, c->rbytes)查詢第乙個\n的位置

5 沒有找到\n,conn_waiting,讀取更多的資料

6 找到的位置為el; 判斷el前乙個字元是否有\r。如果有\r,將\r替換成\0。沒有則\n替換\0

(下乙個命令rcurr = el +1開始,即:get name\r\n)

char *rbuf = 『set key 0 0 4\0\nget name\r\n』

7 呼叫process_command()函式。char *command = 『set key 0 0 4\0』;

8 呼叫tokenize_command()函式。

char *command = 『set key 0 0 4\0』;依次找空格,將每個token存到陣列。

tokens[0].value = 『set』

tokens[0].length= 3

tokens[1].value = 『key』

tokens[1].length= 3

tokens[2].value = 『0』

tokens[2].length= 1

tokens[3].value = 『0』

tokens[3].length= 1

tokens[4].value = 『4』

tokens[4].length= 1

9 根據tokens陣列的大小ntokens以及tokens[0].value來呼叫不同的命令。預設tokens[0]表示memcached命令。

Memcached原始碼分析之資源分享

facebook對memcached的提公升 memcached原始碼分析之記憶體管理篇 the time is passing iteye技術 memcached原始碼分析之記憶體管理篇之item結構圖及slab結構圖 yxnyxnyxnyxnyxn的專欄 關於memcache記憶體管理模型的理解...

Memcached原始碼解析

memcached是乙個非常有名的高效能分布式快取系統,採用memcached作為快取系統能顯著提高系統的效能。想要更好地發揮對memcached的效能,對其源 進行分析顯得非常必要。本文基於memcached 1.4.15進行源 分析,假設讀者對socket,管道,多執行緒程式設計,hash演算法...

Memcached原始碼分析之網路模型篇

memcached 採用多執行緒的工作方式,主線程接收連線,然後把連線平攤給 工作執行緒,工作執行緒處理業務邏輯,memcached 使用 libevent 處理網路 事件,主線程和工作執行緒都有乙個 event base,這是 libevent 的核心資料 結構,event base 能夠監聽多個...