Redis命令詳解:Hashs
Hash是一種String型別的field、value的對映表,因此,它非常適合儲存物件。下面我們來一一介紹與Hash相關的命令。
HDEL
最早可用版本:2.0.0
時間複雜度:O(N),其中N為要刪除的field的個數
HDEL命令用於刪除指定key的指定的一個或多個field。如果指定的field不存在於指定的key中則會被忽略,如果指定的key不存在,會當做空的hash進行處理,向客戶端返回0。
命令的返回值是實際刪除的field的個數,不包括不存在的field。
從2.4.0版本開始,該命令支援一次刪除多個field。在此之前,如果想一次性刪除多個field,只能利用Redis的事務來實現。
HEXISTS
最早可用版本:2.0.0
時間複雜度:O(1)
HEXISTS命令用來驗證指定的key是否包含指定的field,如果包含,返回1;如果不包含或者key不存在,返回0。
HGET
最早可用版本:2.0.0
時間複雜度:O(1)
返回指定的key中指定的field對應的value。如果field不在key中或者key不存在,則返回nil。
HGETALL
最早可用版本:2.0.0
時間複雜度:O(N),N為hash的大小,即key中field的個數。
返回key所儲存的所有field以及field對應的value。每個value跟在field的後面被返回,因此,返回值的長度是hash的size的2倍。如果key不存在,則返回空列表。
127.0.0.1:6379> HGETALL noexist (empty list or set) 127.0.0.1:6379> HSET mykey field1 "follow" (integer) 1 127.0.0.1:6379> HSET mykey field2 "Jackeyzhe2018" (integer) 1 127.0.0.1:6379> HGETALL mykey 1) "field1" 2) "follow" 3) "field2" 4) "Jackeyzhe2018" 複製程式碼
HINCRBY
最早可用版本:2.0.0
時間複雜度:O(1)
用法:
HINCRBY key field increment 複製程式碼
用來對指定key的指定field進行增量操作,返回計算後的結果。如果key不存在,或者key中不包含指定的field,則會先建立一個value為0的hash,如果value不是數字型別,則會報錯。該命令支援的數字範圍是64位有符號整數。
127.0.0.1:6379> keys * #演示使用,生產環境不要用 1) "mykey" 127.0.0.1:6379> HINCRBY myhash field1 1 (integer) 1 127.0.0.1:6379> HGET myhash field1 "1" 127.0.0.1:6379> HSET myhash fieldStr "follow" (integer) 1 127.0.0.1:6379> HINCRBY myhash fieldStr 1 (error) ERR hash value is not an integer 127.0.0.1:6379> HGETALL myhash 1) "field1" 2) "1" 3) "fieldStr" 4) "follow" 127.0.0.1:6379> HINCRBY myhash field2 2 (integer) 2 127.0.0.1:6379> HGETALL myhash 1) "field1" 2) "1" 3) "fieldStr" 4) "follow" 5) "field2" 6) "2" 複製程式碼
HINCRBYFLOAT
最早可用版本:2.6.0
時間複雜度:O(1)
用來對指定的key中指定的field進行浮點型別的加法,如果field不存在,則會先建立一個value為0的field。如果value或者increments不能解析為float型別,則會報錯。通過下面的例子可以看到,浮點數的加法會存在一些偏差。
127.0.0.1:6379> HINCRBYFLOAT myhash field3 0.3 "0.3" 127.0.0.1:6379> HINCRBYFLOAT myhash field3 1.0e3 "1000.29999999999999999" 127.0.0.1:6379> HINCRBYFLOAT myhash field3 -1.0e3 "0.29999999999999999" 127.0.0.1:6379> HINCRBYFLOAT myhash fieldStr 0.1 (error) ERR hash value is not a float 127.0.0.1:6379> HINCRBYFLOAT myhash field3 "haha" (error) ERR value is not a valid float 複製程式碼
HKEYS
最早可用版本:2.0.0
時間複雜度:O(N),其中N為指定key中field的個數
HKEYS命令用於返回指定key中所包含的field列表,如果key不存在,則返回空列表。
HLEN
最早可用版本:2.0.0
時間複雜度:O(1)
返回指定的key所包含的field的個數。如果key不存在,則返回0。
HMGET
最早可用版本:2.0.0
時間複雜度:O(N):N是請求的field的個數
返回指定key中指定的一個或多個field的值。如果field不存在,則返回nil,如果key不存在,同樣會返回field數量的nil。因為不存在的key被作為空的hash處理。
127.0.0.1:6379> HMGET myhash field1 field2 no-exist 1) "1" 2) "2" 3) (nil) 127.0.0.1:6379> HMGET no-exist field1 field2 1) (nil) 2) (nil) 複製程式碼
HMSET
最早可用版本:2.0.0
時間複雜度:O(N):N是需要設定的field的個數
為指定的key設定一個或多個field。如果field已經存在,則會被覆蓋。如果指定的key不存在,則會建立一個新的hash。
HSCAN
最早可用版本:2.8.0
時間複雜度:每次請求的時間複雜度為O(1),完成整個迭代的時間複雜度為O(N)
該命令與SCAN命令相似,可以參考我的另外一篇文章Redis命令詳解:Keys中對SCAN用法的介紹,如果你想要有更深入了了解,可以看我的另外一篇文章ofollow,noindex">深入理解Redis的scan命令 。
HSET
最早可用版本:2.0.0
時間複雜度:O(1)
為指定的key中的field設定value,如果key不存在,則會建立一個新的hash,如果field已經存在,則會覆蓋舊值。如果是新增的field,設定完成後會返回1,如果是更新已有的field,設定完成後會返回0。
HSETNX
最早可用版本:2.0.0
時間複雜度:O(1)
同樣是為指定的key中的field設定value,與HSET命令不同的是,如果field已經存在,則不會有任何操作,直接返回0。
HSTRLEN
最早可用版本:3.2.0
時間複雜度:O(1)
返回指定key中field對應value的字串長度,如果key或field不存在,返回0。