Redis面試相關

什麼是Redis?

Redis是一個基於內存的高性能key-value數據庫

Redis數據類型

  • string:最基本的數據類型,二進制安全
  • hash:String元素組成的字典,適合用於存儲對象
  • list:列表,按照String元素插入順序排序
  • set:無序集合,通過哈希表實現,不允許重複
  • zset :有序集合

Redis爲何這麼快

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

多路I/O複用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力。
在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,當前線程就從阻塞狀態中被喚醒,然後去輪詢一遍所有的流(epoll 是隻輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。
這裏“多路”指的是多個網絡連接,“複用”指的是複用同一個線程。

緩存中間件-Memcache和Redis的區別

Memcache:代碼層次類似Hash

  • 支持簡單數據類型
  • 不支持數據持久化存儲
  • 不支持主從(主從服務器複製)
  • 不支持分片

Redis:

  • 數據類型豐富(String、list、hash、set、zset)
  • 支持數據磁盤持久化存儲
  • 支持主從
  • 支持分片

從海量Key裏查詢出某一固定前綴的Key

  • 方法一:
    使用KEYS pattern命令:查找所有符合給定模式pattern的key
    例如查找前綴爲he的key:keys he*
    特點:

    • KEYS指令一次性返回所有匹配的key,速度很慢
    • 鍵的數量過大會使服務卡頓(影響線上項目運行速度)
  • 方法二:
    使用scan cursor [MATCH pattern] [COUNT count] 命令
    例如查找前綴爲he的key:scan 0 [MATCH he*] [COUNT 4]
    表示的是返回前4個he*前綴的key
    特點:

    • 基於遊標的迭代器,以0作爲遊標起點
    • 不保證每次執行都返回給定數量的元素,支持模糊查詢

因此採用scan命令進行海量數據查詢,查詢快速,不會造成服務卡頓。

11.redis的併發競爭問題如何解決?

Redis爲單進程單線程模式,採用隊列模式將併發訪問變爲串行訪問。Redis本身沒有鎖的概念,Redis對於多個客戶端連接並不存在競爭,但是在Jedis客戶端對Redis進行併發訪問時會發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是由於客戶端連接混亂造成。對此有2種解決方法:

  1. 客戶端角度,爲保證每個客戶端間正常有序與Redis進行通信,對連接進行池化,同時對客戶端讀寫Redis操作採用內部鎖synchronized。
  2. 服務器角度,利用setnx實現分佈式鎖。

注:對於第一種,需要應用程序自己處理資源的同步,可以使用的方法比較通俗,可以使用synchronized也可以使用lock;第二種需要用到Redis的setnx命令,但是需要注意一些問題,如設置鍵值的操作和設置鍵過期時間要保證這兩個操作原子的,不可分割。

如何通過Redis實現分佈式鎖

分佈式鎖需要解決的問題:

  • 互斥性
  • 安全性
  • 死鎖
  • 容錯

分步式鎖的實現

Redis數據持久化

  • RDB(快照)持久化:保存某個時間點的全量數據快照

    • SAVE:阻塞Redis的服務器進程,直到RDB文件被創建完畢
    • BGSAVE:Fork出一個子進程來創建RDB文件,不阻塞服務器進程
  • AOF(Append-Only-File)持久化:保存寫狀態

    • 記錄下所有變更數據庫狀態的指令
    • 以append的形式追加保存到AOF文件中(增量)
  • RDB和AOF的優缺點

    • RDB優點:全量數據快照,文件小,恢復快。
    • RDB缺點:無法保存最近一次快照之後的數據
    • AOF優點:可讀性高,適合保存增量數據,數據不易丟失
    • AOF缺點:文件體積大,恢復時間長
  • RDB-AOF混合持久化方式:

    • BGSAVE做鏡像全量持久化,再使用AOF重放快照之後的操作指令來做增量持久化。

Redis數據的恢復

在RDB和AOF文件共存情況下的恢復流程:

  1. 先查看AOF文件是否存在,如果存在就加載AOF文件進行恢復
  2. 如果AOF文件不存在,則查看RDB文件是否存在,存在則加載RDB文件進行回覆

Redis集羣

一致性哈希算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章