帶你重拾Redis Redis資料結構及使用場景

2021-10-20 01:34:13 字數 1720 閱讀 6165

redis有著非常豐富的資料結構,這些資料結構可以滿足非常多的應用場景, 如果對這些資料結構有乙個比較清晰的認知,使用redis也會更加得心應手。

redis主要支援以下資料結構:

string(字串)

list(雙端鍊錶)

hash(hash字典)

set(無序集合)

sorted set(有序集合)

資料結構

描述實現

string

可以儲存字串,整型和浮點型等型別的資料。適合於簡單的k-v資料場景。

對整數和浮點數執行自增或者自減操作

redis並沒有使用字元陣列來實現這一資料型別,而是自己定義了簡單動態字串(sds: ****** dynamic string)型別來實現這一資料結構。

list

既可以儲存操作有序的資料,還可以當做棧來使用,它適合儲存列表性質的資料。從兩端壓入或者彈出元素

對單個或者多個元素進行修剪,

只保留乙個範圍內的元素

list在redis中使用的是雙端鍊錶和壓縮列表實現的,這就解釋了它為什麼能在頭尾操作元素。 c語言並沒有雙端鍊錶的實現,所以redis自定義了這一資料結構。

hash

hash字典,也是關聯陣列,陣列的每個元素都是key到value的對映,它適合儲存物件這樣的結構化資料。

hash在redis中是使用hash字典和壓縮列表實現的。

setset無序集合,它適合儲存需要去重的元素,且有並集,交集,差集等功能在多個set之間進行比較計算。

整數集合是set的底層實現之一,當集合只有整型元素且元素數量不多的時候,redis就會使用整數集合來實現set。當新新增元素的時候,整數集合會根據新元素的型別自動擴容,並將所有元素的型別都轉為與新元素一樣的型別,在這個過程中,還需要保持原來的順序不變,最後才新增新元素。

sorted set

sorted set有序集合,可以看做加強版的set。sorted set 與 set不同的是,sorted set可以根據元素的score分數進行排序。它適合儲存需要排序的不重複的元素。

sorted set在redis中使用的是跳表實現的,跳表是一種有序且查詢速度很快的資料結構。跳表每個節點都維持指向其他節點的指標,從而達到快速訪問的目的。

可以對 string 進行自增自減運算,從而實現計數器功能。

redis 這種記憶體型資料庫的讀寫效能非常高,很適合儲存頻繁讀寫的計數量。

將熱點資料放到記憶體中,設定記憶體的最大使用量以及淘汰策略來保證快取的命中率。

例如 dns 記錄就很適合使用 redis 進行儲存。

查詢表和快取類似,也是利用了 redis 快速的查詢特性。但是查詢表的內容不能失效,而快取的內容可以失效,因為快取不作為可靠的資料**。

list 是乙個雙向鍊錶,可以通過 lpush 和 rpop 寫入和讀取訊息

不過最好使用 kafka、rabbitmq 等訊息中介軟體。

可以使用 redis 來統一儲存多台應用伺服器的會話資訊。

當應用伺服器不再儲存使用者的會話資訊,也就不再具有狀態,乙個使用者可以請求任意乙個應用伺服器,從而更容易實現高可用性以及可伸縮性。

在分布式場景下,無法使用單機環境下的鎖來對多個節點上的程序進行同步。

可以使用 redis 自帶的 setnx 命令實現分布式鎖,除此之外,還可以使用官方提供的 redlock 分布式鎖實現。

set 可以實現交集、並集等操作,從而實現共同好友等功能。

zset 可以實現有序性操作,從而實現排行榜等功能。

重拾 堅持 沉澱

大約有將近1年左右沒有更新部落格,期間有考慮過每個月或每週花些時間來分享最近所學 所得 但總由於一些原因導致時間被占用 久而久之就漸漸淡忘了寫部落格這件事。現在回想起來感覺還是有一些後悔。其實,時間擠擠總是有的,哪怕每週一小時,乙個月下來,也能梳理出幾篇部落格。再或許是工作一定年限後,那股勁淡去了,...

重拾青藏夢

事隔一年許,才有機會靜下心來,慢慢回憶當年的青藏騎行,並記錄成文。遲遲不願動筆,一是文筆不好,有些回憶是值得留藏心裡,細細品嚐,怕寫出來會變了味,不知所謂 二是工作繁忙,著實沒那份閒情。但我又想寫點什麼,有些成長,不應該只是在記憶中埋藏。青藏線上,充滿了太多的不確定因素,嚴寒,冰雹,缺氧,高原狼,無...

重拾JSP JSP入門

1 當 input 的 type 為 hidden 時,稱其為隱藏域,隱藏域在頁面中對於使用者是不可見的,在表單中插入隱藏域的目的在於收集或傳送資訊,以利於被處理表單的程式所使用。瀏覽者單擊傳送按鈕傳送表單的時候,隱藏域的資訊也被一起傳送到伺服器。2 jsp 在處理提交過來的表單資訊前,使用 req...