天天看點

Redis 博文索引

博文索引

  • Redis 對象與編碼
  • Redis 持久化
  • Redis 主從複制
  • Redis 哨兵
  • Redis 緩存淘汰
  • Redis 集合統計

Redis 簡介

優點

  • 多功能

    提供了豐富的資料結構,可以滿足很多實用場景,基本上能做到開箱即用

    并且支援管道、事務、釋出訂閱、緩存過期、Lua腳本支援等進階功能

  • 高性能

    資料記憶體資料庫,讀寫無需通路外存

    單線程設計,通路記憶體無需線程切換與同步

  • 易部署

    支援持久化,友善資料恢複

    主從複制,提高資料的安全性

    配合 Redis Cluster 可以實作資料分片,突破單機容量限制

    配合 Redis Sentinel 可以實作自動災備,實作高可用

缺點

  • 存儲容量受限

    作為一款記憶體資料庫,記憶體始終是主要瓶頸

    由于記憶體價格較磁盤更為昂貴,是以需要細心規劃 redis 的使用

  • CPU使用率

    redis 的單線程設計,會導緻多核 CPU 的資源使用率不高

    需要同一台機器上部署多個執行個體來提高 CPU 使用率

  • 大規模應用有坑

    運維架構不完整,缺少監控

    不擅長應對高連接配接數 (>10K) 或大資料量 (>16G) 的場景

應用場景

  • 緩存(效率至上)

    單副本,關閉主從複制

    關閉 AOF / BGSAVE,減少磁盤 I/O 對性能影響

    節點當機,直接切空執行個體(丢失部分資料)

  • 資料庫(兼顧安全)

    雙副本,開啟主從複制

    主庫關閉 AOF / BGSAVE

    主挂切備,備挂換新備

  • 大規模應用(橫向擴充)

    搭建叢集,分攤壓力

    讀寫分離,以一緻性換取性能

最佳實踐

  • 合理設計 key-space,用 db 隔離不相關資料,為橫向擴容預留白間
  • 嚴禁設定低讀逾時 (<200ms) 和緊密重試,避免重連風暴
  • 留意 key 分布,避免出現資料傾斜
  • 避免儲存超過 10k 的大 value
  • 設定 ttl 時引入随機性,避免大量 key 同時過期
  • 避免使用部分進階功能:Transaction, Pub/Sub, Blocking API,LUA Script
  • 避免使用高危指令:keys、flushdb、flushall
  • bitset 注意檢查長度,避免引發 OOM

繼續閱讀