學習Redis 雜湊 雜湊 型別和常用命令

2021-08-15 22:38:14 字數 1941 閱讀 3871

redis採用字典結構以鍵值對的形式儲存資料的,而雜湊型別(hash)的鍵值也是一種字典結構,其儲存了字段(field)和字段值的對映,但字段值只能是字串,不支援其他資料型別,即雜湊型別不能巢狀其他的資料型別。乙個雜湊型別鍵可以包含至多2的32次方減乙個字段。

注:除了雜湊型別,redis 的其他資料型別同樣不支援資料型別巢狀。

雜湊型別適合儲存物件。儲存結構如下:

而在關聯式資料庫中如果要儲存汽車物件,儲存結構如下:

資料是以二維表的形式儲存的,這要求所有的記錄都擁有同樣的屬性,無法單獨為某條記錄增減屬性。

而當使用orm(物件關係對映)將關聯式資料庫中的物件實體對映成程式中的實體時,修改表結構往往意味著要中斷服務(重啟**程式)。為了防止這些問題,在關聯式資料庫中儲存這種半結構化資料還需要額外的表才行。

而redis的雜湊結構型別則不存在這個問題。雖然在圖3-5中描述了汽車的儲存結構,但是這個結構只是人為的約定,redis並不要求每個鍵都依據此儲存結構,我們完全可以自由地為任何鍵增減欄位而不影響其他鍵。

hset key field value

hget key field

hmset key field value [field value ....]

hmget key field [field]

hgetall key

127.0.0.1:6379> hset car price 500

(integer) 1

127.0.0.1:6379> hset car name bmw

(integer) 1

127.0.0.1:6379> hget car name

"bmw"

hset命令的不區分插入和更新操作,當執行的是插入操作時hset命令返回1,更新則返回0。當鍵不存在時,則自動建立它。

注:在redis中每個鍵都屬於乙個明確的資料型別。使用一種資料型別的命令操作另一種資料型別的鍵會提示錯誤,當然也不是所有命令都是如此,如set命令可以覆蓋已經存在的鍵而不論原來鍵是什麼型別。

127.0.0.1:6379> hmset car1 price 200 name "sss"

ok127.0.0.1:6379> hmget car1 price name

1) "200"

2) "sss"

hmset 和 hmget命令可同時設定,獲取多個欄位的值。

127.0.0.1:6379> hgetall car

1) "price"

2) "500"

3) "name"

4) "bmw"

hgetall命令獲取鍵中所有欄位和字段值。

hexists key field

hexists 命令用來判斷乙個字段是否存在。存在返回1,否則返回0。

127.0.0.1:6379> hexists car model

(integer) 0

127.0.0.1:6379> hexists car name

(integer) 1

下面命令就不一一舉例了,當然操作雜湊的命令也不止這些。

當字段不存在時賦值

hsetnx key field value

增加數字

hincrby key field increment

刪除字段

hdel key field [field ...]

hdel命令可以刪除乙個或多個字段,返回值是被刪除的字段個數。

redis之雜湊型別

我們知道redis是採用字典結構以鍵值對的形式儲存資料,而雜湊型別的鍵值也是一種字典結構,其儲存了字段和字段值的對映,但是字段值必須是字串,不支援其它資料型別,換句話說,雜湊型別不能巢狀其他資料型別。同時除了雜湊型別,redis的其它資料型別同樣不支援資料型別巢狀。集合型別的每個元素都只能是字串,不...

Redis命令 雜湊型別

hset key field val用來給字段賦值 hget key field獲取欄位的值 hmset key field val field val 一次性賦值多個字段 hmget key field field.獲取多個欄位的值 hgetall key獲取欄位和字段值組成的列表 hexists...

Redis 雜湊hash 型別

redis hash 是乙個 string 型別的 field 和 value 的對映表,hash 特別適合用於儲存物件 基本語法 設定值 hmset hmset zhangsan name 張三 age 20 男 設定值 hset hset zhangsan name 張三 獲取資料 hgetal...