redis 支援哪些資料型別

fqivy發表於2020-11-22

最近在面試的過程中,發現有很多同學都說用過 Redis,但是問 Redis 支援哪幾種資料型別,又不是很能回答上來,特記錄如下:
Redis 支援五種資料型別:string(字串),hash(雜湊),list(列表),set(集合)及 zset(sorted set:有序集合)。

  1. 字串--String

    string 是 redis 最簡單最基本的資料結構,Redis 所有的資料結構都是以唯一的 key 作為名稱,然後透過唯一的 key 值來獲取對應的 value 資料。
    不同型別的資料結構的差異就在於 value 的結構不一樣。
    string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料。比如 jpg 圖片或者序列化的物件。
    字串結構的使用非常廣泛,一個常見的用途就是快取使用者資訊。
    我們將使用者資訊結構體使用 JSON 序列化成字串,然後將序列化後的字串,然後將序列化後的字串塞進 Redis 來快取。
    同樣的,獲取使用者資訊會經過一次反序列化過程。

  2. 列表--List

    Redis 的列表相當於 Java 中的 LinkedList,注意它是連結串列而不是陣列。這意味著 list 的插入和刪除操作會非常快,時間複雜度為 O(1),但是索引定位很慢,時間複雜度為 O(name),這點讓人非常意外。
    當列表彈出最後一個元素之後,該資料結構自動被刪除,記憶體被回收。

    列表可以在左右兩邊進行插入和刪除操作。

  3. 雜湊--Hash

    Redis 中的字典,相當於 Java 中的 HashMap,是無序字典,內部實現結構上同 Java 的 HashMap 是一致的,同樣的陣列 + 連結串列的二維結構。
    Redis hash 是一個 string 型別的 field 和 value 的對映表,hash 特別適合儲存物件。
    Hash 結構儲存使用者資訊,不同於字串一次性需要全部序列化整個物件,hash 可以對使用者結構中的每個欄位單獨儲存。
    這樣我們需要獲取使用者資訊時,可以進行部分獲取。如果以字串形式儲存使用者資訊的話,就只能一次性全部讀取,這樣就會比較浪費流量。

  4. 集合--Set

    Redis 的集合相當於 Java 中的 HashSet,它內部的鍵值對是無序的唯一的。它的內部實現相當於一個特殊的字典,字典中所有的 value 都是一個值 null。
    當集合中最後一個元素移除之後,資料結構自動刪除,記憶體被回收。
    set 結構可以用來儲存活動中獎的使用者 ID,因為有去重功能,可以保證同一個使用者不會中獎兩次。

  5. 有序集合--Sorted Set

    zset 可能是 Redis 提供的最有特色的資料結構,它也是在面試中面試官最愛問的資料結構。
    它類似於 Java 中的 SortedSet 和 HashMap 的結合體,一方面它是一個 set,保證了內部 value 的唯一性,
    另一方面它可以給每個 value 賦予一個 score,代表 value 的排序權重。
    zset 可以用來存粉絲列表,value 值是粉絲的使用者 ID,score 是關注事件。我們可以對粉絲列表按照關注時間進行排序。
    zset 也可以用來儲存學生成績,value 是學生 ID,score 是學生考試成績。我們可以對成績按分數進行排序就可以得到他的名字。

相關文章