Redis-04Redis資料結構--雜湊
阿新 • • 發佈:2018-12-11
雜湊概述
Redis 中雜湊結構就如同 Java 的 map 一樣 , 一個物件裡面有許多鍵值對,它是特別適合儲存物件的.
如果記憶體足夠大 ,那麼一個 Redis 的 hash 結構可以儲存2的32次方-1個鍵值對 ( 40多億)。
在 Redis 中, hash 是一個 String 型別的 field 和 value 的對映表,因此我們儲存的資料實際在 Redis 記憶體中都是一個個字串而己。
假設artisan有 3 個欄位 : 編號( id)、名稱 (name )、性別( sex),這樣就可以使用一個 hash 結構儲存它。
在 Redis 中它就是一個這樣的結構,其中 artisan代表的是這個 hash 結構在 Redis 記憶體的 key,通過它就可以找到這個 hash 結構,而 hash 結構由一系列的 field 和 value 組成
客戶端操作hash
127.0.0.1:6379> HMSET artisan id 123 name littleArtisan sex female
OK
127.0.0.1:6379> HGETALL artisan
1) "id"
2) "123"
3) "name"
4) "littleArtisan"
5) "sex"
6) "female"
127.0.0.1:6379>
Redis hash 結構命令
命令 | 說明 | 備註 |
---|---|---|
hdel key field 1 [ field2 …] | 刪除 hash 結構中的某個(些)欄位 | 可以進行多個欄位的刪除 |
hexists key field | 判斷 hash 結構中是否存在 field 欄位 | 存在返回 1 ,否則返回0 |
hgetall key | 獲取所有 hash 結構中的鍵值 | 返回鍵和值 |
hincrby key field increment | 指定給 hash 結構中的某一欄位加上一個整數 | 要求該欄位也是整數字符串 |
hincrbyfloat key field increment | 指定給 hash 結構中的某一欄位加上一個浮點數 | 要求該欄位是數字型字串 |
hkeys key | 返回 hash 中所有的鍵 | |
hlen key | 返問 hash 中鍵值對的數量 | |
hmget key field1 [field2…] | 返回 hash 中指定的鍵的值,可以是多個 | 依次返回值 |
hmset key field1 value1 [field2 value2…] | hash 結構設定多個鍵值對 | |
hset key filed value | 在 hash 結構中設定鍵值對 | 單個設值 |
hsetnx key field value | 當 hash 結構中不存在對應的鍵,才設定值 | |
hvals key | 獲取 hash 結構中所有的值 |
在 Redis 中的雜湊結構和字串有著比較明顯的不同。
-
首先,命令都是以 h 開頭,代表操作的是 hash 結構
-
其次,大多數命令多了一個層級 field,這是hash 結構的一個內部鍵,也就是說Redis 需要通過 key 索引到對應的 hash 結構,再通過 field來確定使用 hash 結構的哪個鍵值對
注意事項:
- 雜湊結構的大小,如果雜湊結構是個很大的鍵值對,那麼使用它要十分注意。 尤其是關於 hkeys 、 hgetall 、 hvals 等返回所有雜湊結構資料的命令,會造成大量資料的讀取。這需要考慮效能和讀取資料大小對 NM 記憶體的影響 。
- 對於數字的操作命令 hincrby 而言,要求儲存的也是整數型的字串
- 對於hincrbyfloat 而言,則要求使用浮點數或者整數,否則命令會失敗。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> HMSET obj k1 value1 k2 value2 k3 value3
OK
127.0.0.1:6379> HSET obj k4 6
(integer) 1
127.0.0.1:6379> HEXISTS obj k2
(integer) 1
127.0.0.1:6379> HGETALL obj
1) "k1"
2) "value1"
3) "k2"
4) "value2"
5) "k3"
6) "value3"
7) "k4"
8) "6"
127.0.0.1:6379> HINCRBY obj k4 8
(integer) 14
127.0.0.1:6379> HINCRBYFLOAT obj k4 6.2
"20.2"
127.0.0.1:6379> HKEYS obj
1) "k1"
2) "k2"
3) "k3"
4) "k4"
127.0.0.1:6379> HMGET obj k1 k2 k4
1) "value1"
2) "value2"
3) "20.2"
127.0.0.1:6379> HLEN obj
(integer) 4
127.0.0.1:6379> HSETNX obj k2 test
(integer) 0
127.0.0.1:6379> HSETNX obj k5 test
(integer) 1
127.0.0.1:6379> HGETALL obj
1) "k1"
2) "value1"
3) "k2"
4) "value2"
5) "k3"
6) "value3"
7) "k4"
8) "20.2"
9) "k5"
10) "test"
127.0.0.1:6379> HVALS obj
1) "value1"
2) "value2"
3) "value3"
4) "20.2"
5) "test"
127.0.0.1:6379> HDEL obj k5
(integer) 1
127.0.0.1:6379> HGETALL obj
1) "k1"
2) "value1"
3) "k2"
4) "value2"
5) "k3"
6) "value3"
7) "k4"
8) "20.2"
127.0.0.1:6379> HGET obj k4
"20.2"
127.0.0.1:6379>