redis的hash類型


1、簡單描述

  hash是一個string類型的field和value的映射表。添加和刪除操作都是O(1)(平均)的復雜度。hash類型特別適合用於存儲對象。在field的數量在限制的范圍內以及value的長度小於指定的字節數,那么此時的hash類型是用zipmap存儲的,所以會比較節省內存。可以在配置文件里面修改配置項來控制field的數量和value的字節數大小。

  hash-max-zipmap-entries 512 #配置字段最多512個

  hash-max-zipmap-value 64 #配置value最大為64字節。

  必須滿足以上兩個條件,那么該key會被壓縮。否則就是按照正常的hash結構來存儲hash類型的key。

【注意】這兩個配置並不是限制hash結構最多只能存多少個field以及value的最大字節數,而是說在field未超過配置的數量,而且每一個filed對應的value的長度都小於指定的字節數時,注意是兩個條件都滿足時,該key的存儲是采用的zipmap,就是壓縮了的數據,節省空間。當field的數量超過了,或者其中有value的長度大於指定的長度,那么整個key就會采用正常的hash結構來在內存中存儲。

 

2、相關命令(基於4.0.1版本)

1)hset命令:設置一個key的filed對應的值,filed不存在則新增,field存在則修改field對應的值。

2)hgetall命令:獲取該key的所有field以及對應的值。

3)hlen命令:獲取key的長度,就是field的個數。

4)hvals命令:獲取所有filed對應的value,只返回value。

5)hkeys命令:獲取所有的filed,只返回filed,不返回value。

6)hmset命令:一次設置多個filed和對應的值

 

7)hmget命令:獲取多個filed的值

 

8)hdel命令:刪除filed,允許刪除多個。

 9)hincrby命令:給filed字段的值增加一個數,可以是負數。

 

【注意】不能增加浮點數

10)hexists命令:判斷某個field是否存在,存在則返回1,否則返回0。

 

 

3、小結

1)hash結構是可以壓縮的,要同時滿足2個條件,也就是兩個配置項;

2)根據需求來確定數據是采用string類型來存儲(比如把對象序列化為string類型),還是說使用hash存儲(把對象的屬性化為field和value來存儲),如果是field比較少的,而且value也比較小,那么用hash節省內存。但是也要考慮具體的需求,如果采用hash,同時要更新幾個field時會不會麻煩些,如果采用string類型,直接修改整個對象然后直接序列化。

當然hash也支持直接把對象序列化來存儲。具體問題具體分析。


免責聲明!

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



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