redis常見面試題

2022-09-06 22:39:34 字數 3225 閱讀 7549

特點:使用者高併發環境下,訪問資料庫中根本不存在的資料.

影響:由於使用者高併發訪問,則資料庫可能存在宕機的風險.

說明: 由於使用者高併發的訪問. 訪問的資料剛開始有快取,但是由於特殊原有 導致快取失效.(資料』『單個』』)

解決方案:串聯redis伺服器, 並是redis快取失效時間相差幾秒至幾十秒, 保證不再同一時間刪除

說明: 由於高併發的環境下.大量的使用者訪問伺服器. redis中有大量的資料在同一時間超時(刪除).

解決方案:串聯redis伺服器, 並是redis快取失效時間相差幾秒至幾十秒, 保證不再同一時間刪除 (根快取擊穿解決方案類似)

問題說明:

redis中的資料都儲存在記憶體中.如果服務關閉或者宕機則記憶體資源直接丟失.導致快取失效.

持久化原理說明

redis中有自己的持久化策略.redis啟動時根據配置檔案中指定的持久化方式進行持久化操作. redis中預設的持久化的方式為rdb模式.

特點說明:

rdb模式採用定期持久化的方式. 風險:可能丟失資料.

rdb模式記錄的是當前redis的記憶體記錄快照. 只記錄當前狀態. 持久化效率最高的 (快照檔案預設為redis目錄下的dump.rdb)

rdb模式是預設的持久化方式.

持久化命令:

持久化週期:

使用者操作越頻繁,則持久化週期越短.

特點:

aof模式預設是關閉狀態 如果需要則手動開啟.

aof能夠記錄程式的執行過程可以實現資料的實時持久化. aof檔案占用的空間較大.回覆資料的速度較慢.

aof模式開啟之後.rdb模式將不生效.

aof配置:

在redis配置檔案中修改如下 (檔案內容過多, 建議搜尋關鍵字找到此配置)

# 開啟aof模式

# aof更新日誌檔案

持久化週期配置:手動持久化命令:s**e由主程序完成(可能會阻塞),bgs**e使用新的程序完成

思路: 如果允許資料少量的丟失,則首選rdb.(快),如果不允許資料丟失則使用aof模式.

小張在雙11前夜誤操作將redis伺服器執行了flushall命令. 問專案經理應該如何解決??

a: 痛批一頓 ,讓其提交離職申請.

b: 批評教育, 讓其深刻反省,並且請主管 捏腳.

c:專案經理快速解決.並且通知全部門注意.

解決方案:

修改aof檔案中的命令.刪除flushall之後重啟redis即可.

修改redis.conf配置檔案 (大約566行), 以下為注釋內容, 預設是注釋掉的

# maxmemory
修改bytes引數即可

# 1k => 1000 bytes

# 1kb => 1024 bytes

# 1m => 1000000 bytes

# 1mb => 1024*1024 bytes

# 1g => 1000000000 bytes

# 1gb => 1024*1024*1024 bytes

redis執行的空間是記憶體.記憶體的資源比較緊缺.所以應該維護redis記憶體資料,將改讓redis保留熱點資料.

lru是least recently used的縮寫,即最近最少使用,是一種常用的頁面置換演算法,選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間 t,當須淘汰乙個頁面時,選擇現有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。

維度: 自上一次使用的時間t

最為理想的記憶體置換演算法.

lfu(least frequently used (lfu) page-replacement algorithm)。即最不經常使用頁置換演算法,要求在頁置換時置換引用計數最小的頁,因為經常使用的頁應該有乙個較大的引用次數。但是有些頁在開始時使用次數很多,但以後就不再使用,這類頁將會長時間留在記憶體中,因此可以將引用計數暫存器定時右移一位,形成指數衰減的平均使用次數。

least frequently used (lfu) page-replacement algorithm

即最不經常使用頁置換演算法,要求在頁置換時置換引用計數最小的頁,因為經常使用的頁應該有乙個較大的引用次數。但是有些頁在開始時使用次數很多,但以後就不再使用,這類頁將會長時間留在記憶體中,因此可以將引用計數暫存器定時右移一位,形成指數衰減的平均使用次數。

維度: 引用次數

隨機演算法, 即記憶體不足的時候隨機刪除一些已有的資料

大約在配置檔案597行, 有以下被注釋的內容

# maxmemory-policy noeviction
解除注釋, 把noeviction改為以下配置即可, 預設為noeviction策略

volatile-lru在設定了超時時間的資料, 採用lru演算法進行刪除.

allkeys-lru所有資料採用lru演算法

volatile-lfu在設定了超時時間的資料, 採用lfu演算法進行刪除.

allkeys-lfu所有資料採用lfu演算法

volatile-random設定超時時間資料採用隨機演算法

allkeys-random所有資料採用隨機演算法

volatile-ttl設定了超時時間的資料 根據ttl規則刪除. 將剩餘時間少的提前刪除

noeviction記憶體滿了 不做任何操作.報錯返回.

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...