??前言??
本小節圍繞Redis中常見的數據類型與編碼方式展開。
🍉歡迎點贊 👍 收藏 ?留言評論
🍉博主將持續更新學習記錄收獲,友友們有任何問題可以在評論區留言
🍉博客中涉及源碼及博主日常練習代碼均已上傳GitHub
📍內容導讀📍
- 🍅數據類型
- 🍅編碼方式
🍅數據類型
在Redis中,最常見的五種數據類型,分別是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),如圖所示:
此處Redis中的各種數據類型,和Java標準庫中的數據結構有很多相似之處,字符串類型和Java中的String、哈希類型和Java中的HashMap、列表類型和Java中的List、集合類型和Java中的Set,有序集合相當于是除了存儲member之外,還需要存儲一個score(權重、分數)
Redis底層在實現上述數據類型的時候,會在源碼層面,針對上述實現進行特定的優化,來達到節省時間/節省空間的效果,所以內部具體實現的數據類型,還會有編碼方式的變動。
比如Redis承諾,現在有一個hash表,在進行查詢、插入、刪除操作時,都保證O(1)的時間復雜度,
但是,在這個背后的實現,不一定就是一個標準的hash表,可能在特定場景下,使用別的數據結構實現,但是仍然保證時間復雜度符合承諾
🍅編碼方式
實際上Redis針對每種數據結構都有自己的底層內部編碼實現,而且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼,如表所示:
可以看到每種數據結構都有至少兩種以上的內部編碼實現,例如list數據類型包含了linkedlist和ziplist兩種內部編碼,Redis會自動根據當前的實際情況選擇內部的編碼方式,進行自動適應。同時有些內部編碼,例如ziplist,可以作為多種數據結構的內部實現,可以通過object encoding命令查詢內部編碼:
??最后的話??
總結不易,希望uu們不要吝嗇你們的👍喲(^U^)ノ~YO!!如有問題,歡迎評論區批評指正😁