一.概述
?二.lpush與rpush源碼
1.下面是lpush與rpush的源碼,都使用了pushGenericCommand()這個方法
?
2.pushGenericCommand()---List通用插入數(shù)據(jù)函數(shù)--源碼
第一個參數(shù): *c?
當redis客戶端與服務端連接成功后,客戶端就會被封裝成一個client對象,里面包含了用戶對redis的命令。比如說" LPUSH? key? k1? k2" 就是客戶端的一個命令,redis會把 LPUSH ,key,k1,k2放在一個argv[]數(shù)組里面。argv[0] 是LPUSH,argv[1] 是key ,argv[2]是k1,argv[3]是k2
第二個參數(shù):where ,表示在隊首還是隊尾插入數(shù)據(jù)
第三個參數(shù):xx表示在根據(jù)key找對應的list 沒找到時,是應該直接return還是新建一個list,默認值是新建一個list
3.lookupkeyWrite(),嘗試找到key對應的list
第一個參數(shù),c->db是客戶端選擇的第幾個redis數(shù)據(jù)庫(有0~15共16個)
第二個參數(shù),c->argv[1] 就是key
返回的是robj (即RedisObject)
再來看下面這串代碼,表示前面的lookupkeyWrite()返回值是null,就是該key沒有對應一個list
?為空就直接創(chuàng)建新的QuickList
4.createQuicklistObject()源碼:創(chuàng)建QuicklistObject函數(shù)
?
?其中的createObject()源碼
?
?對壓縮列表參數(shù)和壓縮深度進行初始化;
三.總結(jié)
最后的結(jié)構(gòu)是這樣的:文章來源:http://www.zghlxwxcb.cn/news/detail-814182.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-814182.html
到了這里,關于Redis原理篇(List底層結(jié)構(gòu)與源碼詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!