Redis 大廠常見面試題

2021-10-22 03:16:26 字數 1640 閱讀 6676

詳細看 redis的8大應用場景

某個時刻,多個系統例項都去更新某個 key。可以基於 zookeeper 實現分布式鎖。每個系統通過 zookeeper 獲取分布式鎖,確保同一時間,只能有乙個系統例項在操作某個 key,別人都不允許讀和寫。

你要寫入快取的資料,都是從 mysql 裡查出來的,都得寫入 mysql 中,寫入 mysql 中的時候必須儲存乙個時間戳,從 mysql 查出來的時候,時間戳也查出來。

每次要寫之前,先判斷一下當前這個 value 的時間戳是否比快取裡的 value 的時間戳要新。如果是的話,那麼可以寫,否則,就不能用舊的資料覆蓋新的資料。

詳細看 redis,雙寫一致性、併發競爭、執行緒模型

通過以下四個命令實現:

詳細看 redis分布式鎖原理與實現

考慮到session中資料類似map的結構,採用redis中hash儲存session資料比較合適,如果使用單個value儲存session資料,不加鎖的情況下,就會存在session覆蓋的問題,因此使用hash儲存session,每次只儲存本次變更session屬性的資料,避免了鎖處理,效能更好。

如果每改乙個session的屬性就觸發儲存,在變更較多session屬性時會觸發多次redis寫操作,對效能也會有影響,我們是在每次請求處理完後,做一次session的寫入,並且之寫入變更過的屬性。

如果本次沒有做session的更改, 是不會做redis寫入的,僅當沒有變更的session超過乙個時間閥值(不變更session重新整理過期時間的閥值),就會觸發session儲存,以便session能夠延長有效期。

詳細看 幾分鐘搞定redis儲存session共享——設計實現

1.1 鎖需要具備唯一性

​ 1.2 鎖需要有超時時間,防止死鎖

​ 1.3 鎖的建立和設定鎖超時時間需要具備原子性

​ 1.4 鎖的超時問題

​ 1.5 鎖的可重入問題

​ 1.6 集群下分布式鎖的問題

詳細看 redis分布式鎖面臨的問題和解決方案

redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多客戶端對redis的連線並不存在競爭關係。

詳細看 為什麼redis可以做分布式鎖

詳細看 快取雪崩、擊穿、穿透(帶答案)

以上三個問題,詳細看 redis,哨兵、持久化、主從、手撕lru,我都整理好了

zset底層的儲存結構包括ziplist或skiplist,在同時滿足以下兩個條件的時候使用ziplist,其他時候使用skiplist,兩個條件如下:

當ziplist作為zset的底層儲存結構時候,每個集合元素使用兩個緊挨在一起的壓縮列表節點來儲存,第乙個節點儲存元素的成員,第二個元素儲存元素的分值。

當skiplist作為zset的底層儲存結構的時候,使用skiplist按序儲存元素及分值,使用dict來儲存元素和分值的對映關係。

詳細看 redis zset底層資料結構

redis常見面試題

為什麼redis單執行緒還是這麼快?1.絕大部分的請求是純粹的記憶體操作 非常快速 2.採用單執行緒,避免了不必要的額競爭條件和上下文切換,單執行緒指的是網路請求模組使用的是乙個執行緒,即乙個執行緒處理了所有網路請求。3.非阻塞i o i o多路復用,這樣提高了redis的吞吐量,多路 指的是多個網...

Redis常見面試題

5.2.1 redis 是什麼?常 的應用場景?redis是乙個快取資料庫,是乙個非關係型資料庫的鍵值儲存資料庫 應用場景 內容快取,主要用於處理大量資料的高訪問負載 日誌系統5.2.2 redis 常 資料型別有哪些?各自有什麼應用場景?string 儲存的資料是普通的鍵值對可用string來進行...

常見面試題(Redis)

redis redis支援的資料型別?string字串 hash 雜湊 list 列表 set 集合 zset sorted set 有序集合 如何解決快取雪崩 我們先說一下什麼是快取雪崩吧 簡單來說就是redis掛掉了,請求全部走資料庫。還有就是 如果快取資料設定的過期時間是相同的,並且redis...