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