Redis的相關面試題

2021-10-03 09:44:50 字數 2210 閱讀 2832

redis有淘汰機制

1.noeviction(預設c策略)

記憶體不足時,直接報錯。(不用)

2.allkeys-lru

當記憶體不足時,在全部key中移除最近最少使用的key(lru演算法)

3.volatile-lru

當記憶體不足時,在設定了過期時間的key中移除最近最少使用的key(lru演算法)

4.allkeys-random

當記憶體不足時,在所有key中隨機刪除乙個key

5.volatile-random

當記憶體不足時,隨機刪除乙個設定了過期時間的key

6.volatile-ttl

記憶體不足時,有限刪除生存時間最短的key

7.allkeys-lfu

記憶體不足時,在全部key中移除最近最少使用次數的key(lfu演算法)

8.volatile-lfu

當記憶體不足時,在設定了過期時間的key中移除最近最少使用次數的key(lfu演算法)

以上策略可在配置檔案redis.conf中設定

maxmemory # 指定redis的最大記憶體

maxmemory-policy noeviction #指定redis的淘汰機制

3.快取穿透的原因,解決方案

理想狀態下第一次請求 請求 -> 先去快取查詢 -> 再去資料庫查詢 -> 放到快取乙份.

下次請求 請求 -> 先去快取查詢.

而快取穿透則是快取中沒有,資料庫 中也沒有,導致資料庫壓力過大,直接宕機,例如查詢乙個主鍵為id為0的記錄

解決方案:

1.設定主鍵自增

查詢最大的主鍵值,放到redis裡,每次去資料庫查詢之前,先判斷一下傳條件是否大於你的主鍵值.

2. 將全部的主鍵放到redis的set中,在查詢之前,先判斷查詢條件是否存在於set中.

3. 將使用者的ip放到zset中,每查詢一次,將時間戳放入zset中,1分鐘發起了很多次請求,超過了要求上線,封ip.

4. 無論資料庫中是否存在,都存入redis,若不存在則值為null,

4.快取擊穿

原因:資料庫和快取中有乙個是熱點資料,當快取中資料到期,大量請求會同時查詢資料庫,導致資料庫壓力過大,直接宕機

解決方案:利用分布式鎖雙重檢測讓一部分人先查資料庫查完存入快取,其他人再進行查詢就回直接查詢快取

public listselectproductattr(string phonemodel) .gettype();

//先判斷是否有key

boolean aboolean = stringredistemplate.haskey(key);

//如果有key則表示快取中有資料

if (aboolean)

//雙重鎖校驗

//第一層檢測目的:避免所有執行緒排隊

if (null == list || list.isempty())

//2、如果快取中沒有資料

if (null == list || list.isempty()) else }}

}//4、將查詢到的資料返回給使用者

return list;

}

總結:

1、雙重檢測機制(在鎖的內外都進行快取查詢,沒有查到再進行資料庫查詢)。

2、不論查詢到的資料是否為null,都將它寫入快取。

3、避免快取中的null鍵值撐滿整個記憶體,所以需要給null鍵值設定過期時間。

5、key的設計,要唯一標識一條資料,不能被其他資料覆蓋。

比如分頁,book_page_1, book_page_2.

快取id為1的資料:book_id_1

通過這些步驟,既能解決穿透又能保證效率。

4.快取雪崩

原因:大量的快取同時到期,導致資料庫壓力過大,直接宕機

解決方案:

設定生存時間時,避免設定相同時間,應設定為一定返回內的隨機數,如30-60分鐘的隨機數

5.快取傾斜

原因:大量的熱點資料都存在了乙個redis節點中,導致redis宕機

解決方案:

在web伺服器中新增jvm快取(map),設定生存時間

將熱點資料的key在web伺服器中做一次hash計算,並將乙個資料設定到多個redis節點中,分擔壓力,在集群上搭建主從

6.快取同步

將資料庫中的資料同步到快取中

實時同步: 直接呼叫set方法,存入快取

不要求實時同步: 傳送到mq中進行同步

Redis相關面試題

reids 單執行緒 io多路復用機制 redis與memcached的區別 一 memcached值是簡單字串,redis支援hash set list等複雜資料型別 二 redis可持久化資料,容災能力強。memcached只存於記憶體中。三 redis是單執行緒操作,核心是io多路復用機制,效...

Redis相關面試題

原因 redis是記憶體儲存,斷電丟失資料,所以需要資料持久化。非同步執行緒 fork copy on write 系統io fsync rdb 指定時間間隔內觸發頻率,對資料進行快照儲存。儲存rdb檔案是父程序fork子程序來完成,最大化redis的效能 丟失資料多 aof 每次對伺服器寫操作會追...

Redis 相關面試題(下)

1 redis的快取失效策略和主鍵失效機制 作為快取系統都要定期清理無效資料,就需要乙個主鍵失效和淘汰策略.在redis當中,有生存期的key被稱為volatile。在建立快取時,要為給定的key設定生存期,當key過期的時候 生存期為0 它可能會被刪除。1.過期時間跟著key走,與值無關 在red...