我與Redis的第一次
1.背景
1.1 網(wǎng)站流量大,并發(fā)高 -> MySQL瓶頸###
1. 文件緩存:IO壓力大
2. 主從復(fù)制讀寫分離:主寫壓力存在瓶頸
3. 分表分庫(kù):分庫(kù)方式隨需求變化大
1.2 去掉數(shù)據(jù)庫(kù)的關(guān)系特性 -> NoSQL###
1. 數(shù)據(jù)之前無(wú)關(guān)系 -> 擴(kuò)展性好
2. 數(shù)據(jù)庫(kù)結(jié)構(gòu)簡(jiǎn)單 -> 高性能
3. 無(wú)需為存儲(chǔ)的數(shù)據(jù)建立字段 -> 靈活的數(shù)據(jù)模型
1.3 Memcached###
1. 內(nèi)存數(shù)據(jù)庫(kù),緩存數(shù)據(jù)庫(kù)查詢結(jié)果
2. Redis
2.1 Remote Dictionary Server
1. Key-value型NoSQL數(shù)據(jù)庫(kù)
Why Redis, Not Memcached?###
1. Redis支持多種value數(shù)據(jù)類型(String, list, set, zset, hash)
2. Redis支持?jǐn)?shù)據(jù)持久化
3. Redis使用更高效的內(nèi)存管理機(jī)制
4. Redis支持分布式集群
3. Redis支持的value數(shù)據(jù)類型
1.String
struct{
int len;//buf 已占長(zhǎng)度
int free;//buf 剩余可用長(zhǎng)度
char buf[]; //實(shí)際存儲(chǔ)字符串的地方
};
2.List

Paste_Image.png
3.Set
4.SortSet
5.Hash
4.Redis數(shù)據(jù)持久
RDB
1. 保存某個(gè)時(shí)間點(diǎn)Redis上的數(shù)據(jù)集
2. 優(yōu)點(diǎn):相對(duì)AOF,文件比較緊湊
3. 缺點(diǎn):備份時(shí)間長(zhǎng),不能頻繁備份,宕機(jī)丟數(shù)據(jù)量大。
AOF
1.保存Redis寫操作
2.優(yōu)點(diǎn):備份時(shí)間短,可頻繁備份,宕機(jī)丟數(shù)據(jù)量少。
3.缺點(diǎn):文件大;處理大量寫入時(shí),AOF較慢。
5.Redis內(nèi)存管理
5.1 磁盤交換
1.Key一直存內(nèi)存
2.內(nèi)存耗盡 - > 最不常用的value存到磁盤中
3.數(shù)據(jù)量 > 內(nèi)存量
4.Memcached所不具備
5.2 內(nèi)存管理機(jī)制
Memcached
1.內(nèi)存劃分固定規(guī)格
2.內(nèi)存碎片少但浪費(fèi)較大

Paste_Image.png
Redis
1.動(dòng)態(tài)分配內(nèi)存塊大小

redis動(dòng)態(tài)分配內(nèi)存.png
6. Redis分布式集群
Memcache

Paste_Image.png
Redis

Paste_Image.png
7. Redis事件機(jī)制
7.1 文件事件
讀事件
1.客戶端連上時(shí)綁定,狀態(tài)等待
2.命令請(qǐng)求到達(dá)服務(wù)端時(shí),狀態(tài)變成就緒
寫事件
1.服務(wù)端有信息返回給客戶端,但客戶端未能寫,狀態(tài)等待
2.服務(wù)端信息能返回給客戶端,狀態(tài)就緒
7.2 時(shí)間事件
1. Redis對(duì)自身資源狀態(tài)的定時(shí)檢查
7.3 事件機(jī)制
1.事件機(jī)制
2.無(wú)搶占
3.先文件事件、后時(shí)間事件

事件機(jī)制.png
8. Redis服務(wù)端初始化
1.初始化全局狀態(tài)
2.載入配置文件
3.創(chuàng)建Daemon進(jìn)程
4.初始化服務(wù)器功能模塊
5.載入數(shù)據(jù)
6.開(kāi)始事件循環(huán)