1. 程式人生 > >Redis-04Redis資料結構--雜湊

Redis-04Redis資料結構--雜湊

雜湊概述

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>