1. 程式人生 > >系統學習redis之四——redis數據類型之hash類型及操作

系統學習redis之四——redis數據類型之hash類型及操作

。。 del code 操作 redis數據類型 src hms 添加 數據類型

hashes數據類型

Redis的hash是一個string類型的field(字段)和value的映射表。它的添加、刪除操作都是0/1(平均操作法)。hash特別適合用於存儲對象。相較於將對象的每一個字段存成單個string類型。。將一個對象存儲在hash類型中會占用更少的內存,並且可以更方便的存取整個對象。

方法及操作

1)hset:設置hash field為指定值,如果key不存在,則先創建
例如:設置異常hash表,名字為user:001,然後給表裏面添加一個字段為name,對應的值為crystal:

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HSET user:001 name crystal   #user:001可以看做是一個hash表的名稱,name是字段,crystal是字段的值
(integer) 1
127.0.0.1:6379> HGET user:001 name    #獲取user:001這個表裏面name的值
"crystal"
127.0.0.1:6379> 

備註,同《系統學習redis之三——redis數據類型之string類型及操作》一樣,後面的例子也都在同一臺機器一次性操作完畢的,因為後面的代碼如果不加上“ [root@test101 redis-4.0.1]# src/redis-cli ”這一句。代碼高亮也會格式有問題,所以後面所有的例子中都加上了“[root@test101 redis-4.0.1]# src/redis-cli ”,只是為了格式問題。

2)hsetnx:設置hash field為指定值,如果key不存在,則先創建,如果存在,就返回0
例如:黑hash表user:001設置age

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HSETNX user:001 age 10   #因為age這個key不存在,所以第一次指定成功
(integer) 1
127.0.0.1:6379> HGET user:001 age
"10"
127.0.0.1:6379> HSETNX user:001 age 30    #age這個key剛剛已經設置過了,這裏就會設置失敗,而且不會覆蓋原來的值
(integer) 0
127.0.0.1:6379> HGET user:001 age
"10"
127.0.0.1:6379> 

3)hmset:同時設置hash的多個field(字段)
例如:一次性創建一張名字為user:002的hash表,並且設置裏面兩個字段:name=crystal,age=18

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HMSET user:002 name crystal age 18
OK
127.0.0.1:6379> HGET user:002 name 
"crystal"
127.0.0.1:6379> HGET user:002 age
"18"
127.0.0.1:6379> 

4)hmget:獲取全部指定的hash field


例如:一次性獲取上面例子中user:002中的name和age的值

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HMGET user:002 name age
1) "crystal"
2) "18"
127.0.0.1:6379> HMGET user:002 name age sex   #這裏因為表中並沒有sex這個字段,所以會返回空值
1) "crystal"  
2) "18"
3) (nil)
127.0.0.1:6379> 

5)hincrby:給指定的hash field加上給定的值
例如:給user:002中的age加上10歲

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HMGET user:002 name age   
1) "crystal"
2) "18"
127.0.0.1:6379> HINCRBY user:002 age 10     #給 age加上10歲
(integer) 28
127.0.0.1:6379> HGET user:002 age
"28"
127.0.0.1:6379> HINCRBY user:002 age -8     #給age減了8歲
(integer) 20
127.0.0.1:6379> HGET user:002 age
"20"
127.0.0.1:6379> 

6)hexists:測試指定field是否存在
例如:檢測hash表user:002裏面name和sex是否存在

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HEXISTS user:002 name  #name存在,返回1
(integer) 1
127.0.0.1:6379> HEXISTS user:002 sex        #sex字段不存在,返回0
(integer) 0
127.0.0.1:6379> 

7)hlen:返回指定hash的field數量
例如:查看hash表user:002的field數量

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HLEN user:002
(integer) 2     #2表示2個field

8)hdel:刪除指定的hash的field
例如:刪除user:001裏面的field age

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HGET user:001 age
"18"
127.0.0.1:6379> 
127.0.0.1:6379> HDEL user:001 age
(integer) 1
127.0.0.1:6379> HGET user:001 age   #age已經成功刪除,因此這裏返回nil空值
(nil)
127.0.0.1:6379> 

9)hkeys:返回hash的所有field
例如:返回hash表user:001和user:002所有的field

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HKEYS user:001
1) "name"
127.0.0.1:6379> 
127.0.0.1:6379> HKEYS user:002
1) "name"
2) "age"

10)hvals:返回hash表的所有value
例如:返回hash表user:002和user:001所有的value

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HVALS user:001
1) "crystal"
127.0.0.1:6379> HVALS user:002
1) "crystal"
2) "20"
127.0.0.1:6379> :

11)hgetall:獲取某個hash表中全部的field及對應的value(常用)
例如:返回hash表user:002和user:001所有的field及其value

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> HGETALL user:001
1) "name"       #field
2) "crystal"    #value
127.0.0.1:6379> HGETALL user:002
1) "name"       #field1
2) "crystal"    #value1
3) "age"        #field2
4) "20"         #value2
127.0.0.1:6379> 

系統學習redis之四——redis數據類型之hash類型及操作