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


  

  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

 

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM