《Redis高階應用》講座總結

  • 數據結構延展
    • 經常使用數據結構:String,Hash,List,Set,Sorted Set(不聊這些)
    • 高級數據結構:Bitmaps,hyperloglog,GEO
  • 單機拓展到分佈式
    • 爲何要分區:性能瓶頸、資源瓶頸、橫向擴展
    • 分區方案
      • 客戶端自定義hash計算Redis的地址
      • 一致性hash環
      • 槽(sharding)
  • 分佈式管理
    • redis主從
    redis-server --port 6379 
        redis-server --port 6380 --slaveof 192.168.0.167 6379 
        redis-server --port 6381 --slaveof 192.168.0.167 6379
    
        主從複製是樂觀複製,只響應sync,psync
        同步數據:RDB+緩衝區
        sync:全量同步
        Psync:斷線重複制
    • redis哨兵
    sentinel monitor mymaster 192.168.0.167 6379 1
    sentinel monitor mymaster 127.0.0.1 6379 quorum:quorum爲投票時經過的票數
    sentinel down-after-milliseconds mymaster 5000:ping,5000ms後認爲宕機
    
    sentinel parallel-syncs mymaster num:當mymaster掛了後,num臺從機向新的主機複製操做
    sentinel failover-timeout mymaster times:一般被解釋成故障轉移超時時間,但實際上它做用於故障轉移的各個階段:    
        1. 選出合適從節點。     
        2. 晉升選出的從節點爲主節點。     
        3. 命令其他從節點複製新的主節點。     
        4. 等待原主節點恢復後命令它去複製新的主節點。
    • redis集羣
    建立集羣:
    ./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
    
    添加節點:
    ./redis-trib.rb add-node 127.0.0.1:7001 127.0.0.1:6380
    ./redis-trib.rb reshard 127.0.0.1:7001 
    
    刪除節點:
    ./redis-trib.rb reshard 127.0.0.1: 6383
    ./redis-trib.rb del-node  127.0.0.1: 6383 node_id
    
    切換爲從節點:
    redis-cli -c -p 7001 cluster replicate node_id
  • 高併發項目中的緩存策略
    • 緩存淘汰
      • noeviction:當內存不足以容納新寫入數據時,新寫入操做會報錯。
      • allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key。
      • allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。
      • volatile-lru:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,移除最近最少使用的key。
      • volatile-random:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,隨機移除某個key。
      • volatile-ttl:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,有更早過時時間的key優先移除。
    • 緩存粒度控制
      • 所有數據
      • 部分數據
    • 防止緩存雪崩
      • 緩存空對象
      • 布隆過濾器
    • 熱數據更新
      • 使用消息隊列進行異步數據更新
相關文章
相關標籤/搜索