redis的資料型別和儲存結構
一,什麼是redis
Redis(remote dictionary server)是一個基於KEY-VALUE的高效能的 儲存系統,通過提供多種鍵值資料型別來適應不同場景下的快取與儲存需求 。
二。redis的儲存結構
Redis比memached提供了更豐富的資料結構,有五種資料結構:string,list,hash,set,sorted-set redis是以字典結構儲存資料的容器,並允許其他應用通過TCP協議讀寫字典中的內容,一個redis例項可以提供多個用來儲存資料的字典,可以指定把相應的資料儲存到哪個型別的字典裡面。
三。資料型別
1.字串型別: 可以儲存任何形式的字串,包括二進位制型別的資料,session,cookie,圖片等,一個字元型別鍵允許儲存的最大容量是512M 。string型別對應的是key和value,string型別預設支援三種資料格式:字串,整數,浮點
在Redis內部,String型別通過 int、SDS(simple dynamic string)作為結構儲存,int用來存放整型資料,sds存放字 節/字串和浮點型資料。Redis是用C語言寫的,在C的標準字串結構下進行了封裝,用來提升基本操作的效能,同時也充分利用已有的 C的標準庫,簡化實現邏輯。 使用場景:session共享,簡訊驗證碼等,在多臺Web伺服器之間想完成一個session共享的話,有幾種方式,session複製,cookie儲存,把所有的session儲存到redis裡面(把所有session序列化以後儲存到redis的字串裡面)。
2.列表 列表型別(list)可以儲存一個有序的字串列表,常用的操作是向列表兩端新增元素或者獲得列表的某一個片段。 列表型別內部使用雙向連結串列實現,所以向列表兩端新增元素的時間複雜度為O(1), 獲取越接近兩端的元素速度就越 快。即使是一個有幾千萬個元素的列表,獲取頭部或尾部的幾條記錄也是很快的 不同版本內部資料結構的差異: redis3.2之前,List型別的value物件內部以linkedlist或者ziplist來實現, 當list的元素個數和單個元素的長度比較小 的時候,Redis會採用ziplist(壓縮列表)來實現來減少記憶體佔用。否則就會採用linkedlist(雙向連結串列)結構。 redis3.2之後,採用的一種叫quicklist的資料結構來儲存list,列表的底層都由quicklist實現。 這兩種儲存方式都有優缺點,雙向連結串列在連結串列兩端進行push和pop操作,在插入節點上覆雜度比較低,但是記憶體開 銷比較大; ziplist儲存在一段連續的記憶體上,所以儲存效率很高,但是插入和刪除都需要頻繁申請和釋放記憶體; quicklist仍然是一個雙向連結串列,只是列表的每個節點都是一個ziplist,其實就是linkedlist和ziplist的結合,quicklist 中每個節點ziplist都能夠儲存多個數據元素, 使用場景:實現分散式佇列,棧 3.hash型別