redis的儲存結構

2021-07-28 16:53:50 字數 1058 閱讀 5167

hash

是乙個string

型別的field

和value

的對映表。hash特別適合儲存物件,相對於將物件的每個欄位存成單個string型別。乙個物件儲存在hash型別中會占用更少的記憶體,並且可以更方便的訪問整個物件。

我們簡單舉個例項來描述下hash的應用場景,比如我們要儲存乙個使用者資訊物件資料,包含以下資訊:使用者id為查詢的key,儲存的value使用者物件包含姓名,年齡,生日等資訊,如果用普通的key/value結構來儲存,主要有以下2種儲存方式:

第一種方式將使用者id作為查詢key,把其他資訊封裝成乙個物件以序列化的方式儲存,這種方式的缺點是,增加了序列化/反序列化的開銷,並且在需要修改其中一項資訊時,需要把整個物件取回,並且修改操作需要對併發進行保護,引入cas等複雜問題。

第二種方法是這個使用者資訊物件有多少成員就存成多少個key-value對兒,用使用者id+對應屬性的名稱作為唯一標識來取得對應屬性的值,雖然省去了序列化開銷和併發問題,但是使用者id為重複儲存,如果存在大量這樣的資料,記憶體浪費還是非常可觀的。

因此,基於以上兩種方式的缺陷,redis提供的hash很好的解決了這個問題,redis的hash實際是內部儲存的value為乙個hashmap,並提供了直接訪問這個map成員的介面,如下圖:

也就是說,key仍然是使用者id, value是乙個map,這個map的key是成員的屬性名,value是屬性值,這樣對資料的修改和訪問都可以直接通過其內部map的key(redis裡稱內部map的key為field), 也就是通過key(使用者id) + field(屬性標籤) 就可以操作對應屬性資料了,既不需要重複儲存資料,也不會帶來序列化和併發修改控制的問題,也就很好的解決了

Redis儲存結構

redis現在是比較流行的快取資料庫,一般剛接觸的時候都會發現其可以儲存字串 string 雜湊表 hash 列表 list 集合 set 有序集合 sorted set 等。redis是乙個key value儲存,value可以包含上面列出的多種結構,但是key都是字串。也就是說key是strin...

Redis記憶體儲存結構分析

from redis a persistent key value database with built in net inte ce written in ansi c for posix systems 本文是基於 redis v2.2.4 版本進行分析.redis 是支援多key value...

redis的資料結構 儲存set

在redis中,我們可以將set型別看作為沒有排序的字元集合,和list型別一樣,我 們也可以在該型別的資料值上執行新增 刪除或判斷某一元素是否存在等操作。需要 說明的是,這些操作的時間是常量時間。set可包含的最大元素數是4294967295。和list型別不同的是,set集合中不允許出現重複的元...