redis 協議的簡單介紹

2021-07-11 13:43:16 字數 1178 閱讀 4775

zhoulin@:/opt/redis307/src:gdb ./redis-server  --啟動redis的服務端

(gdb)

set args /etc/redis_6379.conf --設定gdb引數

(gdb) br readqueryfromclient --在該函式地方設定斷點

1180 nread = read(fd, c->querybuf+qblen, readlen); --從fd中讀取來自客戶端的查詢命令

(gdb) p c->querybuf

$5 = (sds) 0x7ffff1515008 "*3\r\n$3\r\nset\r\n$8\r\nuser1:id\r\n$3\r\n100\r\n"

redis的協議是以\r\n結束,那該函式獲取到的命令是什麼呢:

*3\r\n --該命令有3個命令 即:set user1:id 100 ,乙個3個引數

$3\r\nset\r\n set命令3個位元組

$8\r\nuser1:id\r\n ---user1:id的長度是8個位元組

$3\r\n100\r\n" --100的長度為3個位元組

所以reids的命令的基本格式為 引數個數 引數1長度 引數1值 引數2長度 引數2值 引數3長度 引數3值

thread 1 (thread 0x7ffff7fef720 (lwp 39512)):

#0 readqueryfromclient (el=0x7ffff14a9150, fd=10, privdata=0x7ffff1510000, mask=1) at networking.c:1181

#1 0x000000000041b799 in aeprocessevents (eventloop=0x7ffff14a9150, flags=3) at ae.c:412

#2 0x000000000041b92e in aemain (eventloop=0x7ffff14a9150) at ae.c:455

#3 0x00000000004275e9 in main (argc=2, argv=0x7fffffffe548) at redis.c:3706

bt以後的執行緒可以看到執行緒掛起的痕跡:

man->aemain->aeprocessevents

redis簡單介紹

多次查詢讓你懷疑人生 冗餘欄位過多會讓你看起來很傻 為啥不試試redis 大大減少了查詢數量,提高了效率 redis的api更加人性化,再也不需要構建sql語句,節省了sql的解析時間 redis 是完全開源免費的,遵守bsd協議,是乙個高效能的key value資料庫。redis 與其他 key ...

redis簡單介紹

特點 速度快,多種資料結構,簡單穩定,客戶端支援語言多,持久化,主從,高可用和分布式 速度快 基於鍵值對的nosql資料庫,將資料都放入記憶體中,使用c語言,單執行緒架構 資料結構 字串,雜湊,列表,集合,有序集合 鍵過期功能,實現快取,簡單穩定不依賴作業系統中的類庫,使用單執行緒 持久化 rdb和...

redis 簡單介紹

了解redis的資料結構有助於了解每種資料結構的優劣勢,方便設計合理的cache結構。1.string 可以儲存字串 浮點型 整型,如果是字串可以執行字串操作,如果是浮點型 整型也可以執行加減操作。redis會識別出它的具體型別。2.list 鍊錶,鍊錶中的每個node包含乙個字串。可以對鍊錶進行兩...