Redis常用命令——hash

hash 類型及操作

Redis hash 是一個 string 類型的 field 和 value 的映射表。它的添加、刪除操作都是 O(1)( 平均)。hash 特別適合用於存儲對象。相較於將對象的每個字段存成單個string 類型。將一個對象存儲在 hash 類型中會佔用更少的內存,並且可以更方便的存取整個對象。省內存的原因是新建一個 hash 對象時開始是用 zipmap(又稱爲 small hash)來存儲的。這個 zipmap 其實並不是 hash table,但是 zipmap 相比正常的 hash 實現可以節省不少 hash 本身需要的一些元數據存儲開銷。儘管 zipmap 的添加,刪除,查找都是O(n),但是由於一般對象的 field 數量都不太多。所以使用 zipmap 也是很快的,也就是說添加刪除平均還是O(1)。如果 field 或者 value 的大小超出一定限制後,Redis 會在內部自動將 zipmap 替換成正常的 hash 實現。這個限制可以在配置文件中指定
hash-max-zipmap-entries 64 #配置字段最多64 個
hash-max-zipmap-value 512 #配置value 最大爲512 字節

以下是hash類型常用的操作命令:

1. hset
hset的命令格式如下:
● hset hashname filedname filevalue

127.0.0.1:6379> hset user name qiuxiao
(integer) 1
127.0.0.1:6379>

上面的例子設置了名稱爲user的hash類型數據,並設置name域的值爲qiuxiao,例:

2. hsetnx
如果要設置的hash數據的key不存在,則創建,然後創建指定的filed;如果filed已經存在,則返回0,不存在,返回1;例:

127.0.0.1:6379> exists myhash
(integer) 0
127.0.0.1:6379> hsetnx myhash filed1 value1
(integer) 1
127.0.0.1:6379> hsetnx myhash filed1 value1
(integer) 0
127.0.0.1:6379> hsetnx myhash filed2 value2
(integer) 1
127.0.0.1:6379>

PS: exists 命令是判斷指定的key是否存在,存在,返回1,不存在,返回0

3. hmset
爲指定key同時設置多個filed,例:

127.0.0.1:6379> hmset user age 27 sex 0 >company tencent
OK
127.0.0.1:6379>

4. hget
獲取指定的hash filed,其命令格式如下:
● hget hashname filedname
如果指定的field域不存在的話,返回nil,例:

127.0.0.1:6379> hget user name
“qiuxiao”
127.0.0.1:6379> hget user address
(nil)
127.0.0.1:6379>

5. hmget
一次性獲取指定hash的多個filed域,不存在的域返回nil,例:

127.0.0.1:6379> hmget user name age sex school
1) “qiuxiao”
2) “27”
3) “0”
4) (nil)
127.0.0.1:6379>

6. hincrby
給指定hash filed加上指定的值,例:

127.0.0.1:6379> hget user age
“27”
127.0.0.1:6379> hincrby user age 2
(integer) 29
127.0.0.1:6379> hincrby user age -5
(integer) 24
127.0.0.1:6379>

指定的field不存在時,則創建,默認的值爲指定的值,例:

127.0.0.1:6379> hincrby user num 6
(integer) 6
127.0.0.1:6379> hget user num
“6”
127.0.0.1:6379>

7. hexists
判斷指定hash filed是否存在,存在返回1,不存在,返回0,例:

127.0.0.1:6379> hexists user name
(integer) 1
127.0.0.1:6379> hexists user filed1
(integer) 0
127.0.0.1:6379>

8. hlen
用於獲取指定hash的filed域的個數(不是獲取長度的哦,別搞錯了),例:

127.0.0.1:6379> hlen user
(integer) 5
127.0.0.1:6379>

9. hdel
用於刪除指定hash的指定filed域,例:

127.0.0.1:6379> hlen user
(integer) 5
127.0.0.1:6379> hdel user num
(integer) 1
127.0.0.1:6379> hdel user num
(integer) 0
127.0.0.1:6379>

10. hkeys
用於獲取指定hash的所有filed域,例:

127.0.0.1:6379> hkeys user
1) “name”
2) “age”
3) “sex”
4) “company”
127.0.0.1:6379>

11. hvals
用於獲取指定hash的所有value域,例:

127.0.0.1:6379> hvals user
1) “qiuxiao”
2) “24”
3) “0”
4) “tencent”
127.0.0.1:6379>

12. hgetall
獲取指定hash中全部的field和value,返回結果是按照field1 value1 filed2 value2 … 的形式,例:

127.0.0.1:6379> hgetall user
1) “name”
2) “qiuxiao”
3) “age”
4) “24”
5) “sex”
6) “0”
7) “company”
8) “tencent”
127.0.0.1:6379>

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