我与Redis的第一次
1.背景
1.1 网站流量大,并发高 -> MySQL瓶颈###
1. 文件缓存:IO压力大
2. 主从复制读写分离:主写压力存在瓶颈
3. 分表分库:分库方式随需求变化大
1.2 去掉数据库的关系特性 -> NoSQL###
1. 数据之前无关系 -> 扩展性好
2. 数据库结构简单 -> 高性能
3. 无需为存储的数据建立字段 -> 灵活的数据模型
1.3 Memcached###
1. 内存数据库,缓存数据库查询结果
2. Redis
2.1 Remote Dictionary Server
1. Key-value型NoSQL数据库
Why Redis, Not Memcached?###
1. Redis支持多种value数据类型(String, list, set, zset, hash)
2. Redis支持数据持久化
3. Redis使用更高效的内存管理机制
4. Redis支持分布式集群
3. Redis支持的value数据类型
1.String
struct{
int len;//buf 已占长度
int free;//buf 剩余可用长度
char buf[]; //实际存储字符串的地方
};
2.List
3.Set
4.SortSet
5.Hash
4.Redis数据持久
RDB
1. 保存某个时间点Redis上的数据集
2. 优点:相对AOF,文件比较紧凑
3. 缺点:备份时间长,不能频繁备份,宕机丢数据量大。
AOF
1.保存Redis写操作
2.优点:备份时间短,可频繁备份,宕机丢数据量少。
3.缺点:文件大;处理大量写入时,AOF较慢。
5.Redis内存管理
5.1 磁盘交换
1.Key一直存内存
2.内存耗尽 - > 最不常用的value存到磁盘中
3.数据量 > 内存量
4.Memcached所不具备
5.2 内存管理机制
Memcached
1.内存划分固定规格
2.内存碎片少但浪费较大
Redis
1.动态分配内存块大小
6. Redis分布式集群
Memcache
Redis
7. Redis事件机制
7.1 文件事件
读事件
1.客户端连上时绑定,状态等待
2.命令请求到达服务端时,状态变成就绪
写事件
1.服务端有信息返回给客户端,但客户端未能写,状态等待
2.服务端信息能返回给客户端,状态就绪
7.2 时间事件
1. Redis对自身资源状态的定时检查
7.3 事件机制
1.事件机制
2.无抢占
3.先文件事件、后时间事件
8. Redis服务端初始化
1.初始化全局状态
2.载入配置文件
3.创建Daemon进程
4.初始化服务器功能模块
5.载入数据
6.开始事件循环