常見的Redis面試題
阿新 • • 發佈:2018-12-13
自己見解,可能有些還不是很全面, 具體需要請自行翻閱官網文章檢視~~~
1:什麼是redis,優點和缺點?
redis: 高效的的key-value的儲存系統,
快取 : 提升cpu的執行效率的 ,,解決低速io和高速應用之間的差異 ,
優點;
- 速度快,因為資料儲存在記憶體中,類似於hashmap
- 支援的資料型別String(String,double,int)list,set,zset,hash,
- 支援事務,
- 豐富的特性 : 可以用於快取,訊息, 按key設定過期時間
缺點: 受限於記憶體 , 不能再海量資料處理
2:設定過期時間原理分析:
expire key sec
setex(String key,int sec,String value)
原理:
積極方法: 週期性的從設定過期時間的key中選擇一部分的key進行刪除
- 隨機測試20個帶有timeout資訊的key
- 超過25%的key被刪除, 則重複執行整個流程
消極方法:
3:訊息佇列 : pub/sub 對比MQ 不能支援多種協議,不支援回滾,訊息持久化
4:redis持久化:
5:redis的記憶體回收策略:
LRU演算法(Least recently used):快取淘汰演算法 根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是“如果資料最近被訪問過,那麼將來被訪問的機率也更高”。
- volatile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰
- volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰
- volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰
- allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰
- allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
- no-enviction(驅逐):禁止驅逐資料(配置檔案預設)
6:redis單執行緒為什麼效能很高:
可以單執行緒處理併發請求, 但仍然存在原子性問題
記憶體和網路的頻寬:
- 基於記憶體
- 資料結構簡單,對資料操作也簡單
- 採用單執行緒,避免了不必要的上下文切換和執行緒競爭關係, 不存在多執行緒導致的切換消耗cpu
- 多路複用模型,非阻塞IO
多路 I/O 複用模型 : 多路指多個連線, 複用指: 同一個執行緒
多路I/O複用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是隻輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作
7:Pipeline管道模型有什麼好處?
- 減少網路開銷執行多個指令,
- 滿足原子性
- 複用性