0 使用理由
0.1 高性能
0.2 高併發
0.3 單線程
- 至於redis單線程的緣由。有點意思。CPU不是Redis的主要瓶頸,由於Redis一般是內存或網絡綁定。例如,通常Linux系統上運行的Redis每秒甚至能夠提供100萬個請求,所以不會使用太多的CPU。言下之意,就是說redis根本不須要多線程,何況多線程會有上下文切換消耗。固然能夠經過啓動多個redis實例,達到利用cpu的目的。
1 緩存使用
1.1 使用場景
- 讀對於寫,爲了減小數據庫訪問的id操做,能夠將數據緩存,提升系統性能
1.2 使用方法
-
查詢redis
- 查出數據後,利用json將數據轉成String類型,存進reids
-
更新sql
- 先把數據更新到數據庫
- 刪除reids的key
2 緩存雪崩
2.1 what
- 因爲緩存時間相近或者redis宕機致使緩存數據同一時間大面積失效,使得數據庫短期請求增多,增長數據庫壓力,減低數據庫訪問性能
2.2 how(解決):
-
事前:數據庫
- 宕機致使:的保證redis高可用,發現機器宕機,及時補上。選擇合適的內存淘汰策略
- 緩存失效時間相同致使的:在設計時間的時候隨機加減幾分鐘
-
過後:json
- 宕機致使的: 利用redis持久化機制保存的數據及時恢復緩存
3 緩存穿透
3.1 what(是什麼)
- 請求緩存中不存在的數據,使得數據庫壓力增大,從而崩掉
3.2 how:(解決)
- 布隆過濾器
- 直接緩存他(空的),設計一個較短期,使其失效
4 Redis數據類型
- String 字符串
- Hash哈希 :用戶ID
- List列表 :粉絲列表
- Set集合 :共同好友
- Sorted Set有序集合:排行榜
5 主從複製
5.1 定義/解釋
創建一個與主數據庫同樣的數據庫環境,稱爲從數據庫,主複製庫通常是準實時的業務數據庫。緩存
5.2 做用
- 做爲備用數據庫,主數據庫發生故障後,切換到從數據庫
- 架構擴展,業務量增大,io訪問頻繁,作多庫的存儲,提升io性能
- 實現讀寫分離。
5.3 原理
- 將主數據庫中的bin-log文件的sql語句複製到從數據庫中的relay-log文件,再次執行。
5.4 Redis哨兵
-
用途:網絡
- 監視主從數據庫運行狀況
- 主數據庫發生故障後,自動切換到從數據庫
6 卡頓現象
6.1 解決方法:
- 使用show global status
- 使用show processlist
- 使用查詢日誌
7 大數據查詢優化
- 優化sql語句 索引
- 使用主從複製,實現讀寫分離
- 加入緩存 如redis