Redis哈希類型的使用場景

  • 2019 年 10 月 11 日
  • 筆記

在上一篇我們詳細介紹了Redis哈希類型的使用命令及內部編碼,那麼在這一篇中,我們將了解了解Redis哈希類型的實際使用場景。大家都知道Redis最核心功能就是性能比較高,因為是它是將數據存儲到記憶體中的,而這是傳統的關係型資料庫所不具備的。用一句通俗的話來形容關係型資料庫和Redis哈希類型的關係就是關係型資料庫中一條記錄相當於Redis哈希類型一個key。


當然我們也可以用字元串類型來存儲,但字元串類型相比哈希類型來說,並不直觀,並且在更新上也不便捷。因為字元串類型和哈希類型相比就相當於關係型資料庫中一條記錄中的一個欄位。但在實際的開發中,為了減少Redis中key的個數,通常來說我們並不會為每個欄位創建一個key,而是將一條數據或者一批邏輯數據,通過序列化的方式保存到一個key中,然後在更新的時候,在通過反序列化來更新數據。


而將數據保存到Redis哈希類型中則不會這麼麻煩,因為Redis哈希類型可以直接修改field。除此之外Redis哈希類型和傳統的關係型資料庫相比,還有一個好處,就是Redis哈希類型,可以支援不同的key中包括不同的field。而在傳統的關係型資料庫當中如果新添加欄位,則所有記錄都有包括這個新欄位,即使這條記錄用不到這個欄位。當然關係型資料庫也有關係型資料庫的好處,它可以做很多複雜式的關聯查詢,在一點上Redis哈希類型則比較困難。


下面我們通過下圖來直觀的感受一下關係型資料庫和Redis哈希類型的區別。


下面我們看一下在使用Redis哈希類型的注意事項。

  • 在實際的開發中為了不讓Redis佔用記憶體較大,所以在使用Redis哈希類型的時候,盡量不要創建過多的鍵。
  • 我們知道Redis哈希類型的內部編碼有ziplist和hashtable兩種,並且在符合某些條件的情況下,這兩種編碼會自動轉換。當Redis哈希類型的內部編碼變成hashtable時,會比ziplist更消耗記憶體,在這一點要特別注意。