0 使用理由
0.1 高性能
- 純內存操作,比在硬盤操作數據的速度有極大提升
0.2 高併發
- 承受請求比直接操作數據庫大得多
0.3 單線程
- 至於redis單線程的原因。有點意思。CPU不是Redis的主要瓶頸,因爲Redis通常是內存或網絡綁定。例如,一般Linux系統上運行的Redis每秒甚至可以提供100萬個請求,因此不會使用太多的CPU。言下之意,就是說redis根本不需要多線程,況且多線程會有上下文切換消耗。當然可以通過啓動多個redis實例,達到利用cpu的目的。
1 緩存使用
1.1 使用場景
- 讀對於寫,爲了減少數據庫訪問的id操作,可以將數據緩存,提高系統性能
1.2 使用方法
- 查詢
- 查出數據後,利用json將數據轉成String類型,存進reids
- 更新
- 先把數據更新到數據庫
- 刪除reids的key
2 緩存雪崩
2.1 what
- 由於緩存時間相近或者redis宕機導致緩存數據同一時間大面積失效,使得數據庫短時間請求增多,增加數據庫壓力,減低數據庫訪問性能
2.2 how(解決):
- 事前:
- 宕機導致:的保證redis高可用,發現機器宕機,及時補上。選擇合適的內存淘汰策略
- 緩存失效時間相同導致的:在設計時間的時候隨機加減幾分鐘
- 事後:
- 宕機導致的: 利用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