redis系列文章:
https://liudongdong.top/categories/redis
本篇來源:
https://liudongdong.top/archives/redisqi-redis-zhi-hash
公眾號:雨中散步撒哈拉
備注:歡迎關(guān)注公眾號京痢,一起學(xué)習(xí),共同進步!
一、基本概念
Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表蔚龙,hash 特別適合用于存儲對象。
Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)映胁。
hash類型可以理解為map集合木羹,{key1:value1,key2:value2}
實例
127.0.0.1:6379> hmset map name liudd age 2 sex man
OK
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
127.0.0.1:6379>
Hash 的應(yīng)用場景:
將一個用戶作為一個 hash ,然后其屬性和值就作為內(nèi)部的 k-v 集合進行存儲
例如
hmset user:1 name 張 age 18 job stu
user:1 代表第 1 個用戶解孙,然后這個用戶具有 name坑填,age,job 這些字段弛姜,因為 redis 效率很高穷遂,因此適合將屬性值經(jīng)常變動的對象作為 hash 存儲
二、命令分類
個人理解和便于學(xué)習(xí)娱据,進行了簡單分類!
分為以下幾類:
- 增加映射
- 刪除映射
- 查詢映射
- 特有命令
1. 增加命令
- hset:設(shè)置一個key中的屬性映射
- hsetnx:屬性映射不存在,則創(chuàng)建成功
- hmset:批量設(shè)置屬性映射
2. 刪除映射
- hdel:刪除一個或多個屬性字段
3. 查詢映射
- hget:查詢一個key的屬性映射
- hmget:查詢多個key對應(yīng)的屬性映射
- hgetall:查詢指定的key中所有的屬性映射和值
- hexists:判斷屬性值是否存在
- hlen:統(tǒng)計集合有多少個屬性
- hkeys:列出所有的key的屬性
- hvals:列出所有的屬性對應(yīng)的value
4. 特有命令
- incrby:指定屬性增加整數(shù)增量
- incrbyfloat:指定屬性增加浮點型增量
三中剩、命令實踐
1. 增加映射
127.0.0.1:6379> keys *
(empty list or set)
# 設(shè)置屬性name
127.0.0.1:6379> hset map name liudd
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
# 批量設(shè)置屬性
127.0.0.1:6379> hmset map age 2 sex man
OK
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# 屬性ff不存在忌穿,則創(chuàng)建成功,反之存在則失敗
127.0.0.1:6379> hsetnx map ff vv
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
127.0.0.1:6379> hsetnx map ff xx
(integer) 0
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
127.0.0.1:6379>
2. 刪除映射
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
# 刪除屬性ff
127.0.0.1:6379> hdel map ff
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
127.0.0.1:6379>
3. 查詢映射
# 查詢所有屬性和值
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# 查詢map集合key-value有多少對
127.0.0.1:6379> hlen map
(integer) 3
# 查詢屬性name值
127.0.0.1:6379> hget map name
"liudd"
# 批量查詢屬性值
127.0.0.1:6379> hmget map name age sex
1) "liudd"
2) "2"
3) "man"
# 查詢key的列表
127.0.0.1:6379> hkeys map
1) "name"
2) "age"
3) "sex"
# 查詢value的列表
127.0.0.1:6379> hvals map
1) "liudd"
2) "2"
3) "man"
# 查詢ff屬性是否存在
127.0.0.1:6379> hexists map ff
(integer) 0
127.0.0.1:6379> hexists map name
(integer) 1
127.0.0.1:6379>
4. 特有命令
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# age屬性增加整數(shù)7
127.0.0.1:6379> hincrby map age 7
(integer) 9
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "9"
5) "sex"
6) "man"
# age屬性增加浮點型1.5
127.0.0.1:6379> hincrbyfloat map age 1.5
"10.5"
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "10.5"
5) "sex"
6) "man"
127.0.0.1:6379>
附錄
下表列出了 redis hash 基本的相關(guān)命令:
序號 | 命令及描述 |
---|---|
1 | [HDEL key field1 field2] 刪除一個或多個哈希表字段 |
2 | HEXISTS key field 查看哈希表 key 中结啼,指定的字段是否存在掠剑。 |
3 | HGET key field 獲取存儲在哈希表中指定字段的值。 |
4 | HGETALL key 獲取在哈希表中指定 key 的所有字段和值 |
5 | HINCRBY key field increment 為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 郊愧。 |
6 | HINCRBYFLOAT key field increment 為哈希表 key 中的指定字段的浮點數(shù)值加上增量 increment 朴译。 |
7 | HKEYS key 獲取所有哈希表中的字段 |
8 | HLEN key 獲取哈希表中字段的數(shù)量 |
9 | [HMGET key field1 field2] 獲取所有給定字段的值 |
10 | [HMSET key field1 value1 field2 value2 ] 同時將多個 field-value (域-值)對設(shè)置到哈希表 key 中。 |
11 | HSET key field value 將哈希表 key 中的字段 field 的值設(shè)為 value 属铁。 |
12 | HSETNX key field value 只有在字段 field 不存在時眠寿,設(shè)置哈希表字段的值。 |
13 | HVALS key 獲取哈希表中所有值焦蘑。 |
14 | [HSCAN key cursor MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對盯拱。 |
更多命令請參考:https://redis.io/commands