1. 程式人生 > >hash類型的應用場景 —— Redis實戰經驗

hash類型的應用場景 —— Redis實戰經驗

pan 對象 span 成了 ring 單獨 info src 商品

  技術分享圖片

  hash類型是一個string類型的field和value的映射表,每個 hash 可以存儲 232 - 1 鍵值對(40多億),hash類型主要有以下應用場景。

  1. 購物車

  以用戶id為key,商品id為field,商品數量為value,恰好構成了購物車的3個要素,如下圖所示。

  技術分享圖片

  2. 存儲對象

  hash類型的(key, field, value)的結構與對象的(對象id, 屬性, 值)的結構相似,也可以用來存儲對象。

  在介紹string類型的應用場景時有所介紹,string + json也是存儲對象的一種方式,那麽存儲對象時,到底用string + json還是用hash呢?

  兩種存儲方式的對比如下表所示。

string + json hash
效率 很高
容量
靈活性
序列化 簡單 復雜

  當對象的某個屬性需要頻繁修改時,不適合用string+json,因為它不夠靈活,每次修改都需要重新將整個對象序列化並賦值,如果使用hash類型,則可以針對某個屬性單獨修改,沒有序列化,也不需要修改整個對象。比如,商品的價格、銷量、關註數、評價數等可能經常發生變化的屬性,就適合存儲在hash類型裏。

  當然,不常變化的屬性存儲在hash類型裏也沒有問題,比如商品名稱、商品描述、上市日期等。但是,當對象的某個屬性不是基本類型或字符串時,使用hash類型就必須手動進行復雜序列化,比如,商品的標簽是一個標簽對象的列表,商品可領取的優惠券是一個優惠券對象的列表(如下圖所示)等,即使以coupons(優惠券)作為field,value想存儲優惠券對象列表也還是要使用json來序列化,這樣的話序列化工作就太繁瑣了,不如直接用string + json的方式存儲商品信息來的簡單。

  技術分享圖片

  綜上,一般對象用string + json存儲,對象中某些頻繁變化的屬性抽出來用hash存儲。

  

  hash類型的常用命令可參考http://www.runoob.com/redis/redis-hashes.html

  加入string類型的應用場景後的思維導圖如下。

  技術分享圖片

hash類型的應用場景 —— Redis實戰經驗