菜鳥面試路上的那些坑 Redis淺篇(第一節)

2021-10-18 03:51:21 字數 1921 閱讀 5533

總結這個主要講的就是曾經自己面試的時候,因為自己準備的不恰當,那些沒有回答出來的面試問題,菜鳥面試路上的那些坑

redis(remote dictionary server ),即遠端字典服務,是乙個開源的使用ansi c語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、key-value資料庫,並提供多種語言的api。(這不重要)

string(字串),hash(雜湊),list(列表),set(集合),zset(有序集合)。

這五種是乙個標準的答案,但是還有其他幾種,他們就是bitmaps,hyperloglogs,streams,geospatial這四種可能比較陌生但你能多說以上幾種,然後可以對此進行實用場景進行一些描述,比起原本五個的回答更添光彩。

string:底層結構一般大家都叫做字串,但查閱一些資料,我才知道他們還有更深層,也就是當我們設定像("hello"或者乙個int型別的數字9),他們在底層實現又是不同,可以分為以下三種。

適用場景:

hash

底層結構可以分為兩種:ziplist(壓縮列表),ht(dictionary字典)。

ziplist:是乙個經過特殊編碼的雙向鍊錶,有趣的是這個鍊錶它不儲存上乙個節點以及指向下乙個鍊錶節點的指標,而只是儲存上乙個節點以及當前的節點的長度。

而ht(hashtable)則是陣列加鍊表的乙個結構。

適用場景:

set:

這個集合特點:不存在重複元素,元素無序,此外也是比較重要就是支援集合那些交集並集等操作,這些操作也決定了他的適用場景。

他的兩種儲存結構:1.intset 2.hashtable

適用場景:

商品篩選,比如各種分類類別中都存在乙個相同商品可以利用sinter進行乙個交集的得出

zset

有序集合,集合中每乙個元素都有乙個對應的分數,基於這個分數進行排序,當分數相同,則以key的ascii值進行排序。儲存結構如下

在這我們主要講一下skiplist跳表他的這個原理圖以及解釋

上面就是普通鍊錶下你假如需要查詢到6,就需要從頭遍歷,時間複雜度效率不高

而上圖,便是跳表下的乙個效率,你可以把他的看成二分查詢或者快速排序那種,先找到在某個區間,在這個區間繼續比較最後找到最小區間塊進行查詢。

適用場景:

bitmap:

bitmap,位圖使用bit,1byte = 8 bit,

長度可以根據你的需求,比如使用者一周登入次數,長度可以為7,哪天登入了就可以在相應位置上設定為1.

使用場景:

redis hyperloglog

hyperloglog,是一種用來做基數統計的演算法(近似大量統計去重元素數量的演算法),在輸入元素數量或者體積非常大的時候,計算基數所需的空間總是固定並且很小的。在redis裡面,每個hll只會華為12kb記憶體,卻可以計算2^64不同元素的基數。

geospatial

geo主要用於儲存地理位置資訊,並對儲存的資訊進行操作。

適用場景:

面試的那些坑!

這幾天在面試的時候一直被乙個問題,被問到我就想查下這個問題是不是我說的不太對,問題如下 nginx與haproxy的區別 haproxy的特點 支援tcp與http協議,工作在網路4層和7層 支援session共享 cookies引導 支援通過url健康檢測 支援8種負載均衡策略 支援心跳檢測 ng...

在產品路上爬過的那些坑 硬體部分

作為乙個立志成為產品汪的人,正在經歷人生中最痛苦的蛻變。與其說的像蛻變那麼好聽,不如直白一點,就是爬坑。我是做軟硬一體產品的,所以有兩個坑是你不得不爬的,乙個是硬體,乙個是軟體。今天就和大家說說硬體的坑。在說硬體坑之前說一句話 乙個好的 商很重要,硬體不簡簡單單看 不要去尋找物美價廉的硬體。上面的那...

那些年面試遇到的坑

在非同步模式下,當我們使用ajax傳送完請求後,可能還有 需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含ajax請求 的函式中的剩餘 將繼續執行。如果我們是將請求結果交由另外乙個js函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣...