Redis實戰(4)資料型別二Hashes

2021-09-21 11:07:37 字數 1462 閱讀 7862

redis hash 是乙個 string 型別的 field 和 value 的對映表.它的新增、 刪除操作都是 o(1)(平均)。

hash 特別適合用於儲存物件。相較於將物件的每個欄位存成單個 string 型別。

將乙個物件儲存在 hash 型別中會占用更少的記憶體,並且可以更方便的訪問整個物件。省記憶體的原因是新

建乙個 hash 物件時開始是用 zipmap(又稱為 small hash)來儲存的。

這個 zipmap 其實並不是 hash table,但是 zipmap 相比正常的 hash 實現可以節省不少 hash 本身需要的一些元資料儲存開銷。儘管 zipmap 的新增,刪除,查詢都是 o(n),但是由於一般物件的 field 數量都不太多。所以使用 zipmap 也是很快的,也就是說新增刪除平均還是 o(1)。如果 field 或者 value

的大小超出一定限制後,redis 會在內部自動將 zipmap 替換成正常的 hash 實現. 

這個限制可以在配置檔案中指定

1

2

hash-max-zipmap-entries 64#配置欄位最多 64 個

hash-max-zipmap-value 512#配置 value 最大為 512 位元組

下面說一下hash的基本命令:

hset:

設定 hash field 為指定值,如果 key 不存在,則先建立。

hsetnx:

設定 hash field 為指定值,如果 key 不存在,則先建立。如果 field 已經存在,返回 0,nx 是not exist 的意思。

第一次執行是成功的,但第二次執行相同的命令失敗,原因是 field 已經存在了。

hmset:

同時設定 hash 的多個 field。

hget:

獲取指定的 hash field。

hmget:

獲取全部指定的 hash filed。

不存在的field,會返回nil

hincrby:

指定的 hash filed 加上給定值

hexists:

測試指定 field 是否存在。

通過上例可以說明 field2 存在,但 field9 是不存在的。

hlen:

返回指定 hash 的 field 數量。

hdel:

刪除指定hash的field

hkeys:

返回 hash 的所有 field。

hvals:

返回 hash 的所有 value。

hgetall:

獲取某個 hash 中全部的 filed 及 value。

可見,一下子將 myhash 中所有的 field 及對應的 value 都取出來了。

redis(二) 資料型別

參考文章 一 redis資料型別 1.1 字串 strings 有人說,如果只使用redis中的字串型別,且不使用redis的持久化功能,那麼,redis就和memcache非常非常像了。這說明strins型別是乙個很基礎的資料型別,也是任何儲存系統都必須必備的資料型別。字串型別是二進位制安全的。1...

(二)redis的資料型別

redis可以儲存資料,但是不加限定,這裡的資料指的是個什麼樣的資料就成了疑問,因為面對現實社會中存在的資訊,不同語言或者不同工具,會把它們劃分成不同的資料型別,每種資料型別甚至又有自己獨特的表示方式。所以引出了redis這個工具中可以容納的資料型別。redis的資料型別可以分為字串 雜湊表 鍊錶 ...

redis的資料型別(二)string型別

下面講解value,value包括string list set sorted set hash string是最基本的型別,而且stirng型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg或者序列化的物件。從內部實現來看其實string可以看做byte陣列,最大上限...