NoSQL之Redis對數據類型hash的操作

一、簡介

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

127.0.0.1:6379> hexists hashkey1 f1
(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"

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