1. 程式人生 > >常見的Redis面試題

常見的Redis面試題

 自己見解,可能有些還不是很全面,  具體需要請自行翻閱官網文章檢視~~~

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管道模型有什麼好處?

  • 減少網路開銷執行多個指令,
  • 滿足原子性
  • 複用性

8: Lua指令碼在redis的應用: