咱們在緩存json數據到redis時常常會面臨是選擇string類型仍是選擇hash類型去存儲。接下來我從佔用空間和IO兩方面來分析這兩種類型的優點。redis
根據數據結構的共識咱們知道hashtable類型是要比string類型更佔用空間, 而ziplist類型與string類型佔用的空間基本相差不大。json
以下圖就是ziplist的存儲的格式緩存
那咱們接下來分別分析redis的string和hash類型佔用空間方面的知識數據結構
string類型: string類型固然如其名,若是json數據以string類型去存儲,那麼它的空間佔用方面確定是至關的。編碼
hash類型: redis對hash類型是有兩種編碼方式,分別是ziplist和hashtable。對象
當以下狀況時redis的hash類型,底層是用ziplist編碼的:blog
- 哈希對象保存的全部鍵值對的鍵和值的字符串長度都小於 64 字節;
- 哈希對象保存的鍵值對數量小於 512 個;
不知足上述狀況時,redis的hash類型,底層編碼格式爲hashtable。ip
從IO的角度來分析string和hash類型,咱們得有一個共識,咱們知道redis是有服務端的,也就是部署redis的所在機器他們會運算能力的。字符串
string類型:部署
hash類型:
綜上所述,那具體怎麼選擇是用string類型仍是hash類型存儲json數據呢?給出如下結論