0 使用理由
0.1 高性能
- 純內(nèi)存操作羡铲,比在硬盤操作數(shù)據(jù)的速度有極大提升
0.2 高并發(fā)
- 承受請求比直接操作數(shù)據(jù)庫大得多
0.3 單線程
- 至于redis單線程的原因宣增。有點(diǎn)意思锥累。CPU不是Redis的主要瓶頸霞幅,因?yàn)镽edis通常是內(nèi)存或網(wǎng)絡(luò)綁定述么。例如剃根,一般Linux系統(tǒng)上運(yùn)行的Redis每秒甚至可以提供100萬個(gè)請求,因此不會(huì)使用太多的CPU艰管。言下之意滓侍,就是說redis根本不需要多線程,況且多線程會(huì)有上下文切換消耗牲芋。當(dāng)然可以通過啟動(dòng)多個(gè)redis實(shí)例粗井,達(dá)到利用cpu的目的。
1 緩存使用
1.1 使用場景
- 讀對于寫街图,為了減少數(shù)據(jù)庫訪問的id操作浇衬,可以將數(shù)據(jù)緩存,提高系統(tǒng)性能
1.2 使用方法
- 查詢
- 查出數(shù)據(jù)后餐济,利用json將數(shù)據(jù)轉(zhuǎn)成String類型耘擂,存進(jìn)reids
- 更新
- 先把數(shù)據(jù)更新到數(shù)據(jù)庫
- 刪除reids的key
2 緩存雪崩
2.1 what
- 由于緩存時(shí)間相近或者redis宕機(jī)導(dǎo)致緩存數(shù)據(jù)同一時(shí)間大面積失效,使得數(shù)據(jù)庫短時(shí)間請求增多絮姆,增加數(shù)據(jù)庫壓力醉冤,減低數(shù)據(jù)庫訪問性能
2.2 how(解決):
- 事前:
- 宕機(jī)導(dǎo)致:的保證redis高可用,發(fā)現(xiàn)機(jī)器宕機(jī)篙悯,及時(shí)補(bǔ)上蚁阳。選擇合適的內(nèi)存淘汰策略
- 緩存失效時(shí)間相同導(dǎo)致的:在設(shè)計(jì)時(shí)間的時(shí)候隨機(jī)加減幾分鐘
- 事后:
- 宕機(jī)導(dǎo)致的: 利用redis持久化機(jī)制保存的數(shù)據(jù)及時(shí)恢復(fù)緩存
3 緩存穿透
3.1 what(是什么)
- 請求緩存中不存在的數(shù)據(jù),使得數(shù)據(jù)庫壓力增大鸽照,從而崩掉
3.2 how:(解決)
- 布隆過濾器
- 直接緩存他(空的)螺捐,設(shè)計(jì)一個(gè)較短時(shí)間,使其失效
4 Redis數(shù)據(jù)類型
- String 字符串
- Hash哈希 :用戶ID
- List列表 :粉絲列表
- Set集合 :共同好友
- Sorted Set有序集合:排行榜
5 主從復(fù)制
5.1 定義/解釋
建立一個(gè)與主數(shù)據(jù)庫一樣的數(shù)據(jù)庫環(huán)境矮燎,稱為從數(shù)據(jù)庫定血,主復(fù)制庫一般是準(zhǔn)實(shí)時(shí)的業(yè)務(wù)數(shù)據(jù)庫。
5.2 作用
- 作為備用數(shù)據(jù)庫诞外,主數(shù)據(jù)庫發(fā)生故障后澜沟,切換到從數(shù)據(jù)庫
- 架構(gòu)擴(kuò)展,業(yè)務(wù)量增大峡谊,io訪問頻繁茫虽,做多庫的存儲(chǔ),提高io性能
- 實(shí)現(xiàn)讀寫分離既们。
5.3 原理
- 將主數(shù)據(jù)庫中的bin-log文件的sql語句復(fù)制到從數(shù)據(jù)庫中的relay-log文件濒析,再次執(zhí)行。
5.4 Redis哨兵
- 用途:
- 監(jiān)視主從數(shù)據(jù)庫運(yùn)行情況
- 主數(shù)據(jù)庫發(fā)生故障后贤壁,自動(dòng)切換到從數(shù)據(jù)庫
6 卡頓現(xiàn)象
6.1 解決方法:
- 使用show global status
- 使用show processlist
- 使用查詢?nèi)罩?/li>
7 大數(shù)據(jù)查詢優(yōu)化
- 優(yōu)化sql語句 索引
- 使用主從復(fù)制悼枢,實(shí)現(xiàn)讀寫分離
- 加入緩存 如redis