Redis數據庫相關

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

Memcache:代碼層次類似Hash

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

Redis:

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

Redis數據類型

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

Redis爲何這麼快

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

從海量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命令進行海量數據查詢,查詢快速,不會造成服務卡頓。

如何通過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集羣

一致性哈希算法

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