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
Tags: