日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

我們知道在redis中有5種數據類型,之前的文章中我們已經介紹過了String類型,也就是字符串類型,今天我們學習第二種數據類型,哈希類型。大部分語言基本都提供了哈希類型,如JAVA語言中的Map類型及Python語言中的字典類型等等。雖然語言不同,但它們基本使用都是一樣的。也就是都是鍵值對結構的。例如:

value={{field1, value1}

下面我們通過下圖來直觀感受一下字符串類型和哈希類型的區別。

Redis哈希類型

 

Redis中哈希類型都是鍵值對結構的,所以要特別注意這里的value并不是指的是Redis中的key的value,而是Redis中哈希類型中的field所對應的value。

下面我們還是和介紹字符串類型一樣,先是了解一下Redis中哈希類型的相關命令。

命令


一. 設置值

hset key field value 
Redis哈希類型

 

我們看上圖執行的命令知道,hset命令也是有返回值的。如果hset命令設置成功,則返回1,否則則返回0。除此之外Redis也為哈希類型提供了hsetnx命令。在字符串那篇文章中,我們知道,nx命令則表示key不存在的時候,才能設置成功,而在Redis中hsetnx命令則表示field不存在的時候,才能設置成功。


二. 獲取值

hget key field
Redis哈希類型

 

 

我們看hget命令和get有很大的不同,get命令在獲取的時候,只要寫一個名字就可以了,而hget命令則要寫兩個名字,第一個名字就是key 第二個名字就是field。除此之外,當然key或者field不存在時,返回的結果都是nil。


三. 刪除field

hdel key field [field ...]
Redis哈希類型

 

hdel命令刪除的時候,也會有返回值,并且這個返回就是成功刪除field的個數。當field不存在時,并不會報錯,而是直接返回0。


四. 計算field個數

hlen key
Redis哈希類型

 

hlen命令返回的就是當前key中field的個數,如果key不存在,則返回0。


五. 批量設置或獲取field-value

hmget key field [field ...]
hmset key field value [field value ...]
Redis哈希類型

 

hmset命令和hmget命令分別都是批量設置和獲取值的,hmset命令沒有什么要注意的,但hmget命令要特別注意,當我們獲取一個不存在的key或者不存在的field時,Redis并不會報錯,而是返回nil。并且有幾個field不存在,則Redis返回幾個nil,當整個key都不存在時,則返回全部nil(有幾個field返回幾個nil)。


六. 判斷field是否存在

hexists key field
Redis哈希類型

 

當執行hexists命令時,如果當前key包括field,則返回1,否則返回0。

七. 獲取所有field

hkeys key
Redis哈希類型

 


八. 獲取所有value

hvals key
Redis哈希類型

 


九. 獲取所有的field-value

hgetall key
Redis哈希類型

 

hgetall命令會返回當前key中的所有field-value,并按照順序依次返回,也就是field-value field-value等等。


十. hincrby hincrbyfloat

hincrby key field increment
hincrbyfloat key field increment
Redis哈希類型

 

hincrby命令和incrby命令的使用功能基本一樣,都是對值進行增量操作的。唯一不同的就是incrby命令的作用域key,而hincrby命令的作用域則是field。


十一. 計算value的字符串長度

hstrlen key field
Redis哈希類型

 

hstrlen命令返回的是當前key中field中字符串的長度,如果當前key中沒有field則返回0。


哈希類型命令的時間復雜度

Redis哈希類型

 

 

內部編碼

在Redis哈希類型的內部編碼只有兩種它們分別是:

  • ziplist(壓縮列表):當哈希類型中元素個數小于hash-max-ziplist-entries配置(默認512個)同時所有值都小于hash-max-ziplist-value配置(默認64字節)時,Redis會使用ziplist作為哈希的內部實現。
  • hashtable(哈希表):當上述條件不滿足時,Redis則會采用hashtable作為哈希的內部實現。

下面我們通過以下命令來演示一下ziplist和hashtable這兩種內部編碼。

  1. 當field個數比較少并且value也不是很大時候Redis哈希類型的內部編碼為ziplist。
  2. 當value中的字節數大于64字節時(可以通過hash-max-ziplist-value設置),內部編碼會由ziplist變成hashtable。
  3. 因為在Redis中中文的字節數比英文的字節數大大,正常來說,一個中文占用3個字節。
  4. 當field個數超過512(可以通過hash-max-ziplist-entries參數設置),內部編碼也會由ziplist變成hashtable。
  5. 由于直接創建512個field不方便,為了更好的驗證該功能,我將用程序的方式,動態創建512個field來驗證此功能,下面為具體的代碼。
Redis哈希類型

 


Redis哈希類型

 

 


以上就是Redis中哈希類型的相關命令及內部編碼,如本文有不正確的地方歡迎指出。

分享到:
標簽:類型 Redis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定