劍指Java面試--Redis

Redis簡介

MySQL中的數據都是存儲在緩存中的,雖然在數據庫中做了對應的緩存,一般針對的是查詢的內容,而且粒度比較小,並且當數據庫內容不發生變更的時候,緩存纔有作用。不能減輕業務系統對數據庫的增刪改查IO壓力。因此緩存數據庫應運而生,實現對熱點數據的緩存,提高了響應速度,緩解後端數據庫的壓力。
主流應用架構

  • 穿透:穿透緩存層,訪問數據庫層
  • 熔斷:不管有沒有獲得數據都返回,在有損的情況下,對外提供服務

緩存中間件

Memcache和Redis的區別

Memcache:代碼層次類似Hash

  • 支持簡單數據類型
  • 不支持數據持久化存儲
  • 不支持主從
  • 不支持分片

Redis

  • 數據類型豐富
  • 支持數據磁盤持久化存儲
  • 支持主從
  • 支持分片

爲什麼Redis能這麼快

100000+QPS

  • 完全基於內存,絕大部分的請求是純粹的內存操作,執行效率高
  • 數據結構簡單(鍵值對),對數據的操作也簡單
  • 採用了單線程,單線程也能處理高併發請求,想多核也可以啓動多實例
  • 使用多路I/O複用模型,非阻塞IO

I/O多路複用模型

  • FD:文件描述符。一個打開的文件通過唯一的描述符進行應用,該描述符是打開文件的源數據到文件本身的映射。
  • Select系統調用:Selector負責監聽這些文件是否可讀或者可寫
  • Redis採用的I/O多路複用函數:epoll/kqueue/evport/select?
    - 因地制宜:編譯平臺不同
    - 優先選擇時間複雜度爲O(1)
    - 以時間複雜度爲O(n)的select爲保底:掃描全部監聽的文件
    - 基於react設計模式監聽I/O事件:實現文件事件處理器

Redis簡介

供用戶使用的數據類型

  • String:最基本的數據類型,可以存儲序列化對象,二進制圖
  • Hash:String元素組成的字典,適合用於存儲對象
  • List:列表,按照String元素插入順序排列(類似棧)
  • Set:String元素組成的無需集合,通過hash表實現,不允許重複
  • Sorted Set:通過分數來爲集合中的成員從小到大排序(增加權重)
  • 用於計數的HyperLogLog,用於支持存儲地理位置信息的Geo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章