php面試之Reids篇

1、什麼數據能夠放緩存

  • 不須要實時更新可是又極其消耗數據庫的數據。好比網站上商品銷售排行榜,這種數據一天統計一次就能夠了,用戶不會關注其是不是實時的。
  • 須要實時更新,可是更新頻率不高的數據。好比一個用戶的訂單列表,他確定但願可以實時看到本身下的訂單,可是大部分用戶不會頻繁下單。
在某個時刻訪問量極大並且更新也很頻繁的數據。這種數據有一個很典型的例子就是 秒殺,在秒殺那一刻,可能有N倍於平時的流量進來,系統壓力會很大。可是這種數據使用的緩存不能和普通緩存同樣,這種緩存必須保證不丟失,不然會有大問題。

2、爲何redis這麼快

  • 一、徹底基於內存,絕大部分請求是純粹的內存操做,很是快速。數據存在內存中,相似於HashMap,HashMap的優點就是查找和操做的時間複雜度都是O(1);
  • 二、數據結構簡單,對數據操做也簡單,Redis中的數據結構是專門進行設計的;
  • 三、採用單線程,避免了沒必要要的上下文切換和競爭條件,也不存在多進程或者多線程致使的切換而消耗 CPU,不用去考慮各類鎖的問題,不存在加鎖釋放鎖操做,沒有由於可能出現死鎖而致使的性能消耗;
  • 四、使用多路I/O複用模型,非阻塞IO;
  • 五、使用底層模型不一樣,它們之間底層實現方式以及與客戶端之間通訊的應用協議不同,Redis直接本身構建了VM 機制 ,由於通常的系統調用系統函數的話,會浪費必定的時間去移動和請求;

3、爲何使用緩存

redis緩存,爲何要用緩存呢,舉個例子,假如系統中有2千萬用戶信息,用戶信息基本固定,一旦錄入不多變更,
那麼你每次加載全部用戶信息時,若是都要請求數據庫,數據庫編譯並執行你的查詢語句,這樣效率就會低下不少,針對這種信息不常常變更而且數據量
較大的狀況,一般作法,就是把他加入緩存,每次取數前先去判斷,若是緩存不爲空,那麼就從緩存取值,若是爲空,再去請求數據庫,並將數據加入緩存,
這樣大大提升系統訪問效率面試

4、redis特性

  1. 速度快,由於數據存在內存中
  2. 支持豐富數據類型,支持string,list,set,sorted set,hash
  3. 支持事務,操做都是原子性
  4. 豐富的特性:可用於緩存,消息,按key設置過時時間,過時後將會自動刪除
  5. redis能夠持久化其數據
僅記錄最近面試他人常常問到已經本身容易忘記的redis概念。

掃碼關注我獲取更多面試技巧

掃碼關注我獲取更多面試技巧↑↑redis

相關文章
相關標籤/搜索