一、簡介
Redishash是一個string類型的field和value的映射表。它的添加、刪除操作都是0(1)(平均)。hash特別適合存儲對象,將一個對象存儲在hash類型中會佔用更少的內存,並且可以更方便的存取整個對象。
二、具體操作
1.hset hashkey filed value:設置一個名爲hashkey的hash表裏面field的指定值爲value,如果key不存在,則自動創建。若設置成功返回integer 1否則返回錯誤信息。
127.0.0.1:6379> hset hashkey1 field1 value1
(integer) 1
127.0.0.1:6379> hget hashkey1 field1
"value1"
類似一張表裏只能操作一個字段,可以設置這個字段的值,或者取這個字段的值。
2.hget hashkey field:獲取hashkey的hash表中field的value值
127.0.0.1:6379> hget hashkey1 field1
"value1"
3.hsetnx hashkey field value:設置hashkey field爲指定value值,如果key不存在,那麼先創建,返回interger 1。如果存在則返回integer 0。(創建不成功)
127.0.0.1:6379> hsetnx hashkey2 f2 v2
(integer) 1
127.0.0.1:6379> hget hashkey2 f2
"v2"
127.0.0.1:6379> hsetnx hashkey2 f2 v22
(integer) 0
127.0.0.1:6379> hget hashkey2 f2
"v2"
上面的操作,首先用hsetnx設置hashkey2裏f2對應的值爲v2,返回integer 1證明設置成功,然後獲取這個值爲v2是正確的。接着繼續對已經存在的hashkey2裏的f2設置新值v22,這個時候返回integer 0 證明是失敗的。再用hget獲取這個值發現還是v2並沒有改變。
127.0.0.1:6379> hsetnx hashkey2 f3 v3
(integer) 1
127.0.0.1:6379> hget hashkey2 f3
"v3"
通過上面的操作我們可以看到這個nx是來限定hashkey中的field的,與hashkey沒有關係,一個hashkey可以設置無數多個field。
4.hmset hashkey field1 value1 field2 value2 field3 value3....:同時設置hashkey中的多個field值。
127.0.0.1:6379> hmset hashkey1 f1 v1 f2 v2 f3 v3
OK
127.0.0.1:6379> hget hashkey1 f1
"v1"
127.0.0.1:6379> hget hashkey1 f2
"v2"
127.0.0.1:6379> hmset hashkey1 f1 v11 f2 v22
OK
127.0.0.1:6379> hget hashkey1 f1
"v11"
127.0.0.1:6379> hget hashkey1 f2
"v22"
通過上面的命令操作很容易理解這個命令的作用,注意的一點就是,這個命令可以覆蓋已經存在field的value值,可以設置新的newvalue。
5.hmget hashkey field1 field2 field3...:批量獲取hashkey裏的field值
127.0.0.1:6379> hmget hashkey1 f1 f2 f3
1) "v11"
2) "v22"
3) "v3"
6.hincrby hashkey field count:對hashkey裏的field值增加count。成功返回相加後的值,失敗返回錯誤信息
127.0.0.1:6379> hincrby hashkey1 num 2
(integer) 2
127.0.0.1:6379> hincrby hashkey1 num 3
(integer) 5
127.0.0.1:6379> hincrby hashkey1 num 4
(integer) 9
127.0.0.1:6379> hincrby hashkey1 num -2
(integer) 7
這裏需要注意的就是,count可以是負數,證明是做減法。
若一開始key不存在,那麼默認起始值爲0(通過第一條操作可以看出來,一開始num不存在,用hincrby給它加2,結果是2)
7.hexists hashkey field:檢查hashkey裏的field是否存在。如果存在返回integer 1,如果不存在返回integer 0
(integer) 1
127.0.0.1:6379> hexists hashkey1 f7
(integer) 0
8.hlen hashkey:返回指定hashkey中的field數量。
127.0.0.1:6379> hlen hashkey1
(integer) 6
127.0.0.1:6379> lenhashkey3
(error) ERR unknown command 'lenhashkey3'
9.hdel hashkey field:刪除指定hash裏的一個field字段
127.0.0.1:6379> hget hashkey1 f1
"v11"
127.0.0.1:6379> hdel hashkey1 f1
(integer) 1
127.0.0.1:6379> hget hashkey1 f1
(nil)
10.hkeys hashkey:返回hash中所有的field,相當於php中的array_keys
127.0.0.1:6379> hkeys hashkey1
1) "field1"
2) "f2"
3) "f3"
4) "num"
5) "num1"
127.0.0.1:6379> hkeys hashkey3
(empty list or set)
通過上面的操作可以看出hashkey1中有5個field而hashkey3中沒有field值,是空的。
11.hvals hashkey:返回hash中的所有value,相當於php中的array_values
127.0.0.1:6379> hvals hashkey1
1) "value1"
2) "v22"
3) "v3"
4) "7"
5) "4"
127.0.0.1:6379> hvals hashkey3
(empty list or set)
12.hgetall hashkey:獲取某個hash中全部的field和value
127.0.0.1:6379> hgetall hashkey1
1) "field1"
2) "value1"
3) "f2"
4) "v22"
5) "f3"
6) "v3"
7) "num"
8) "7"
9) "num1"
10) "4"