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是學生考試成績。我們可以對成績按分數進行排序就可以得到他的名字。

相關文章