Redis中Hash類型相關(guān)命令介紹
一、簡介
在 Redis 中,哈希類型是指值本??是?個鍵值對結(jié)構(gòu),形如 key = “key”,value = { { field1, value1 }, …, {fieldN, valueN} },在Redis中為了與key - value作區(qū)分,將Hash類型鍵值對結(jié)構(gòu)表示為filed - value。
String與Hash對比圖:

二、相關(guān)命令
2.1 hset 和 hget
hset: 設(shè)置 hash 中指定的字段(field)的值(value)。
語法:hset key field value [field value ...]
命令有效版本:2.0.0 之后
時間復(fù)雜度:插??組 field 為 O(1), 插? N 組 field 為 O(N)
返回值:添加的字段的個數(shù)。

也可以當(dāng)修改字段的效果:

hget:獲取 hash 中指定字段的值。
語法:hget key filed
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(1)
返回值:字段對應(yīng)的值或者 nil。

2.2 hexists
hexists判斷 hash 中是否有指定的字段。
語法:hexists key filed
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(1)
返回值:1 表?存在,0 表?不存在。

2.3 hdel
hdel刪除 hash 中指定的字段。
語法:hdel key field [field ...]
命令有效版本:2.0.0之后
時間復(fù)雜度:刪除?個元素為 O(1). 刪除 N 個元素為 O(N).
返回值:本次操作刪除的字段個數(shù)。

2.4 hkeys
hkeys獲取 hash 中的所有字段。
語法:hkeys key
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(N), N 為 field 的個數(shù).
返回值:字段列表。

2.5 hvals
hvals 獲取 hash 中的所有的值。
語法:hvals key
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(N), N 為 field 的個數(shù).
返回值:Hash所有value列表。

2.6 hgetall
hgetall獲取 hash 中的所有的字段和值。
語法:hgetall key
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(N), N 為 field 的個數(shù).
返回值:Hash所有字段和對應(yīng)的值。

2.7 hmget
hmget?次獲取 hash 中多個字段的值。
hmget key field [field ...]
命令有效版本:2.0.0 之后
時間復(fù)雜度:只查詢?個元素為 O(1), 查詢多個元素為 O(N), N 為查詢元素個數(shù).
返回值:字段對應(yīng)的值或者 nil。

2.8 hlen
hlen獲取 hash 中的所有字段的個數(shù)。
語法:hlen key
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(1)
返回值:字段個數(shù)。

2.9 hsetnx
hsetnx在字段不存在的情況下,設(shè)置 hash 中的字段和值。
語法:hsetnx key field value
命令有效版本:2.0.0 之后
時間復(fù)雜度:O(1)
返回值:1表?設(shè)置成功,0 表?失敗。

2.10 hincrby
hincrby將 hash 中字段對應(yīng)的數(shù)值(必須是整數(shù))添加指定的值。
語法: hincrby key field increment
命令有效版本:2.0.0之后
時間復(fù)雜度:O(1)
返回值:該字段變化之后的值。

2.11 hincrbyfloat
hincrbyfloathincrby的浮點(diǎn)數(shù)版本, 將 hash 中字段對應(yīng)的數(shù)值(可以是整數(shù)和浮點(diǎn)數(shù))添加指定的值。
語法: hincrbyfloat key field increment
命令有效版本:2.6.0之后
時間復(fù)雜度:O(1)
返回值:該字段變化之后的值。

2.12 小結(jié)
| 命令 | 執(zhí)?效果 | 時間復(fù)雜度 |
|---|---|---|
| hset key field value | 設(shè)置值 | O(1) |
| hget key field | 獲取值 | O(1) |
| hdel key field [field …] | 刪除 field | O(k), k 是 field 個數(shù) |
| hlen key | 計算 field 個數(shù) | O(1) |
| hgetall key | 獲取所有的 field-value | O(k), k 是 field 個數(shù) |
| hmget key field [field …] | 批量獲取 field-value | O(k), k 是 field 個數(shù) |
| hmset key field value [field value …] | 批量獲取 field-value | O(k), k 是 field 個數(shù) |
| hexists key field | 判斷 field 是否存在 | O(1) |
| hkeys key | 獲取所有的 field | O(k), k 是 field 個數(shù) |
| hvals key | 獲取所有的 value | O(k), k 是 field 個數(shù) |
| hsetnx key field value | 設(shè)置值,但必須在 field 不存在時才能設(shè)置成功 | O(1) |
| hincrby key field n | 對應(yīng) field-value +n | O(1) |
| hincrbyfloat key field n | 對應(yīng) field-value +n | O(1) |
| hstrlen key field | 計算 value 的字符串?度 | O(1) |
三、編碼方式
哈希的內(nèi)部編碼有兩種:
- ziplist(壓縮列表):當(dāng)哈希類型元素個數(shù)?于 hash-max-ziplist-entries 配置(默認(rèn) 512 個)、同時所有值都?于 hash-max-ziplist-value 配置(默認(rèn) 64 字節(jié))時,Redis 會使? ziplist 作為哈希的內(nèi)部實(shí)現(xiàn),ziplist 使?更加緊湊的結(jié)構(gòu)實(shí)現(xiàn)多個元素的連續(xù)存儲,所以在節(jié)省內(nèi)存??? hashtable 更加優(yōu)秀。
- hashtable(哈希表):當(dāng)哈希類型?法滿? ziplist 的條件時,Redis 會使? hashtable 作為哈希的內(nèi)部實(shí)現(xiàn),因?yàn)榇藭r ziplist 的讀寫效率會下降,? hashtable 的讀寫時間復(fù)雜度為 O(1)。

四、應(yīng)用場景
4.1 作為緩存
存儲結(jié)構(gòu)化的數(shù)據(jù)的時候,使用 hash 更加合適。

使用hash表示:

總結(jié)
到此這篇關(guān)于Redis中Hash類型相關(guān)命令介紹的文章就介紹到這了,更多相關(guān)Redis Hash類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄功能
對于我們用戶來講,我們在登陸一個APP的時候,有很多種登陸方式,比如"微信掃碼"、"手機(jī)號登陸"、"支付寶掃碼"、"賬號密碼登錄",現(xiàn)在大多都會要求微信掃碼登錄或者是手機(jī)號驗(yàn)證碼登錄,所以本文給大家介紹了基于Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄功能,需要的朋友可以參考下2025-01-01
Redis分布式鎖的實(shí)現(xiàn)方式(redis面試題)
這篇文章主要介紹了Redis分布式鎖的實(shí)現(xiàn)方式(面試常見),需要的朋友可以參考下2020-01-01
深入解析Redis的LRU與LFU算法實(shí)現(xiàn)
這篇文章主要重點(diǎn)介紹了Redis的LRU與LFU算法實(shí)現(xiàn),并分析總結(jié)了兩種算法的實(shí)現(xiàn)效果以及存在的問題,并闡述其優(yōu)劣特性,感興趣的小伙伴跟著小編一起來看看吧2023-07-07

