hotframelearning(簡稱 hfl) redis_08_list型別底層儲存資料結構
一、大致介紹
二、list資料結構
2.1 原始碼詳解(lpush/rpush)
1、圖1中,我們可以看到是兩個push方法,只不過乙個left push,乙個是right push而已:
2、最終 lpushcommand、rpushcommand 都會呼叫 pushgenericcommand 這個核心方法;
3、pushgenericcommand 核心方法中,如果物件不存在的話,則通過 createquicklistobject 方法構建乙個 quilist 列表物件;然後將值通過 listtypepush 方法推入之列表裡面;
2.2 原始碼詳解(createquicklistobject)
1、圖2中,建立了乙個quicklist列表,這個列表 type 型別是 obj_list 型別,encoding 編碼是 obj_encoding_quicklist 型別:
2、圖3中,建立了乙個有head又有tail的雙向鍊錶的quicklist列表物件:
3、圖4中,展示了 quicklist 的內部結構體,有頭有尾的雙向鍊錶,
4、圖5中,展示了 quicklist 內部 head、tail 的內部結構體,而這個 quicklistnode 就是用來描述所謂的 ziplist;
2.3 原始碼詳解(listtypepush)
1、圖5中,總體描述的事情是將新的value壓入quicklist列表中:
2、圖6中,針對頭插法、尾插法兩種型別分別呼叫不同的方法將value壓入列表中:
3、圖8中,不管是頭插法也好,還是尾插法也好,總而言之都是針對 ziplist 的操作,沒有就建立 ziplist,有的話就將 value 壓入 ziplist 中;
2.4 原始碼總結
1、圖9中,用一張圖來總結下 list 的底層資料結構;
2、list 的底層結構為:quciklist是由quicklistnode構成的雙向鍊錶;
歡迎關注+點讚,您的肯定是對我最大的支援!!!
大資料有多大?
本文計算人類產生資料的能力。那麼,大資料到底有多大?是不是像某些人想的那樣,可以趨近於無限大呢?在某些時候,我也會這麼想,可是不能把科幻寫成吹牛皮,明明4k的畫質就已經很清晰了,偏偏科幻出乙個4000k的畫質,這沒有意義。下文中,我們就具體計算一下,人類到底能夠產生多大的資料。計算過程 80億人 8...
大資料,多大算「大
在資料 氾濫 的今天,人人都在提 大資料 但多大的資料才算 大 呢?如果盲目的強調 大 結果只會被資料淹沒,從而導致資訊過量,最終對決策不僅沒有幫助反而使人困惑 不知所措。今天,我們來談一談資訊過量的問題。資料分析的目的 我們對資料做分析的目的是將資料轉化成資訊,從而幫助人們更好的做決策。因此,決策...
大資料,多大算「大
在資料 氾濫 的今天,人人都在提 大資料 但多大的資料才算 大 呢?如果盲目的強調 大 結果只會被資料淹沒,從而導致資訊過量,最終對決策不僅沒有幫助反而使人困惑 不知所措。今天,我們來談一談資訊過量的問題。資料分析的目的 我們對資料做分析的目的是將資料轉化成資訊,從而幫助人們更好的做決策。因此,決策...