2020/1/21

Redis資料庫+分佈鎖 - 簡介(一)


  • Redis資料庫特性
    • 單線程操作
    • 非阻塞I/O多路復用機制
    • 所有操作都是原子性
    • key-value nosql資料庫
    • 數據類型
      • String(字符串)
      • List(列表)
      • Hash(字典)
      • Set(集合)
      • Sorted Set(有序集合)
      • HyperLogLog(基数统计用)

    • 資料可存於內存中,速度非常快。官方提供的數據表明,在一個普通的linux機器上,Redis讀寫速度分別達到81000/s和110000/s , 
    • 持久化 , 異步保存到磁盤上 , 保存數據到磁盤可以避免斷電時導致一段時間內的數據丟失(memcacache不能持久化,mongo是部分在內存)
      • 內存存儲
      • 磁盤存儲
      • log文件
    • 主-從復制
      • 無論是第一次同步建立的連接還是連接斷開後的重新連接,master都會將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存起來。
      • 後臺進程完成寫文件後,master就發送文件給slave,slave將文件保存到磁盤上,然後加載到內存恢復數據庫快照到slave上。
      • 接著master就會把緩存的命令轉發給slave。而且後續master收到的寫命令都會通過開始建立的連接發送給slave。
    • Sharding數據分布到多個Redis實例中
  • 文件格式
    • 全量數據將數據結果儲存
    • 增量請求將數據序列化為操作請求,用於讀取文件進行replay得到數據
  • 持久化方式
    • Snapshotting(RDB)(默認) 
      • 在n秒內如果超過m個key被修改就自動做快照
    • Append-only file (AOF)
      • 將每一個收到的寫命令都通過fsync函數 , 每X秒強制write函數追加到文件中,當redis重啟時會通過重新執行文件中保存的寫命令來在內存中重建整個數據庫的內容。 
  • Redis應用場景
    • 高命中率的資料
    • 用List取最新的X筆資料
    • 用Sorted Set進行排行榜
    • 用Sorted Set進行過期數據處理
    • 用set重複更新資料
    • 用Pub/Sub系統可以構建實時的消息系統
    • 用list可以構建隊列系統
    • 用Sorted Sets範圍查找
      • 例如服務端對於客戶端IP不同的版本區間會做些不同的配置
    • 用set做交集,並集,差集
  • Redis實用命令
    • Keys * : 返回所有的key,* 可使用正則表達式查詢
    • Type key :返回key的類型(string ,zset ,list)
    • Select 1 : 選擇第一個數據庫;默認0-15個數據庫;默認是第0個數據庫
    • Dbsize : 當前數據庫中的key的個數
    • Monitor : 監控收到的請求
  • 分佈鎖演化
    • 基於Redis資料庫實現分佈鎖
    • 基於Redisson框架實現分佈鎖
    • Redis資料庫主從架構鎖失效問題
    • 高併發分布式鎖如何實現

沒有留言:

張貼留言

test2