博文索引
- 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