Redis之3———hash類型詳解:常用操作、業務場景

目錄

1 key的命名規範

2 hash類型

3 基本操作

1 hset key field value:添加修改數據

2 hget key field,hgetall key:獲取數據

3 hdel key field1 [field2]:刪除數據

4 hmset key field1 value1 field2 value2……:添加修改多個數據

5 hmget key field1 hield2……:獲取多個數據

6 hlen key:獲取hash表中字段的數量

7 hexists key field:獲取hash表中是否存在指定字段

8 hkeys key:獲取hash表的所有字段名

9 hvals key:獲取hash表中的所有字段值

10 hincrby key field increment / hincrbyfloat key field incremnt:給字段的數值加上increment

11 hsetnx key field value

4 hash類型的操作注意事項

5 hash的應用場景:購物車


在介紹hash之前我們首先介紹以下key的命名規範。

1 key的命名規範

由於redis中的熱點數據都是來源於關係型數據庫,因此要將數據對應起來,我們一般情況下key的命名規範如下:

表名:主鍵名:主鍵值:字段名

例如redis中有一條數據來自於關係型數據庫的表student中的id爲1001的學生的name

那麼我們就可以設置key的名字爲:

student:id:1001:name

這樣的命名規範一目瞭然,並且簡潔。

2 hash類型

如果需要在redis中存儲一個人的多個信息,我們可以採用Json的格式來存儲,但是如果有頻繁的更新操作那麼Json存儲就顯得笨重,但是如果我們分開來存儲,那麼但是它又是屬於一個整體,分開存儲又顯得不合適,如下所示:

如上圖:hash類型即是在value裏面再嵌套一個key-value,如下圖所示。

hash類型:

  • 新的存儲需求;對一些列存儲的數據進行編組,方便管理,典型應對存儲對象信息
  • 新的存儲結構:一個存儲控件保存多個鍵值對數據
  • hash類型底層使用hash表結構實現數據存儲,如果field數量較少,存儲結構優化爲數組結構,如果filed比較多,使用HashMap結構。

3 基本操作

1 hset key field value:添加修改數據

2 hget key field,hgetall key:獲取數據

hget key field可以拿單個field裏面的數據,比如我們要拿user name 裏面的數據:

hgetall 通過key可以拿到所有的數據,單數爲field,雙數爲value.如下圖所示:

3 hdel key field1 [field2]:刪除數據

例如我們將user 裏面的weight刪除。

4 hmset key field1 value1 field2 value2……:添加修改多個數據

如上圖,name已經修改了,並且添加了weight爲50,hmset存在就改,不存在就加。

5 hmget key field1 hield2……:獲取多個數據

6 hlen key:獲取hash表中字段的數量

即user裏面有3個字段,即field的個數。

7 hexists key field:獲取hash表中是否存在指定字段

如上圖,user裏面存在字段age,不存在字段high。

8 hkeys key:獲取hash表的所有字段名

9 hvals key:獲取hash表中的所有字段值

10 hincrby key field increment / hincrbyfloat key field incremnt:給字段的數值加上increment

如上如,先通過hincrby給age加了10,再通過hincrbyfloat給age加了10.5

11 hsetnx key field value

只有field不存在的時候才設置它的值。

4 hash類型的操作注意事項

  • hash類型value只能存string
  • 每個hash可以存儲2的23次方減1個鍵值對
  • hgetall可以獲取全部屬性,如果內部field過多,整體效率會降低。

5 hash的應用場景:購物車

電商中的購物車一般如下圖所示:

首先每個用戶都有自己的一個購物車,每個購物車裏面的商品不止一個,並且每個商品的數量也不止一個。

因此我們可以用用戶的id作爲key,用購物車商品的編號作爲field,用商品的數量作爲value。

同時相關的操作也可以實現,例如hget、hincrby可以對商品數量進行操作,hgetall可以對應全選操作,hdel對應刪除操作,hlen還可以得到購物車中的商品總數量。

如果我們僅討論購物車的redis存儲模型:添加、瀏覽、更改數量、刪除、清空等,那麼hash是完全可以實現這個模型的。

解決方案如下:

redis通常可以應用於搶購、限購、限量發放優惠卷、激活碼等業務的數據存儲設計。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章