redis | 七、redis之Hash

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. 增加映射
  2. 刪除映射
  3. 查詢映射
  4. 特有命令

1. 增加命令

  1. hset:設(shè)置一個key中的屬性映射
  2. hsetnx:屬性映射不存在,則創(chuàng)建成功
  3. hmset:批量設(shè)置屬性映射

2. 刪除映射

  1. hdel:刪除一個或多個屬性字段

3. 查詢映射

  1. hget:查詢一個key的屬性映射
  2. hmget:查詢多個key對應(yīng)的屬性映射
  3. hgetall:查詢指定的key中所有的屬性映射和值
  4. hexists:判斷屬性值是否存在
  5. hlen:統(tǒng)計集合有多少個屬性
  6. hkeys:列出所有的key的屬性
  7. hvals:列出所有的屬性對應(yīng)的value

4. 特有命令

  1. incrby:指定屬性增加整數(shù)增量
  2. 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市例嘱,隨后出現(xiàn)的幾起案子狡逢,更是在濱河造成了極大的恐慌,老刑警劉巖拼卵,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奢浑,死亡現(xiàn)場離奇詭異,居然都是意外死亡腋腮,警方通過查閱死者的電腦和手機雀彼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來低葫,“玉大人详羡,你說我怎么就攤上這事『傩” “怎么了实柠?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長善涨。 經(jīng)常有香客問我窒盐,道長,這世上最難降的妖魔是什么钢拧? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任蟹漓,我火速辦了婚禮,結(jié)果婚禮上源内,老公的妹妹穿的比我還像新娘葡粒。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布嗽交。 她就那樣靜靜地躺著卿嘲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夫壁。 梳的紋絲不亂的頭發(fā)上拾枣,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音盒让,去河邊找鬼梅肤。 笑死,一個胖子當(dāng)著我的面吹牛邑茄,可吹牛的內(nèi)容都是我干的姨蝴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撩扒,長吁一口氣:“原來是場噩夢啊……” “哼似扔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搓谆,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炒辉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泉手,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黔寇,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年斩萌,在試婚紗的時候發(fā)現(xiàn)自己被綠了缝裤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡颊郎,死狀恐怖憋飞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姆吭,我是刑警寧澤榛做,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站内狸,受9級特大地震影響检眯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昆淡,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一锰瘸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昂灵,春花似錦避凝、人聲如沸舞萄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹏氧。三九已至,卻和暖如春佩谣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背实蓬。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工茸俭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痘系,地道東北人柒巫。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像补憾,于是被迫代替她去往敵國和親酌伊。 傳聞我的和親對象是個殘疾皇子腾窝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容