我与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
Paste_Image.png
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.内存碎片少但浪费较大
Paste_Image.png
Redis
1.动态分配内存块大小
redis动态分配内存.png
6. Redis分布式集群
Memcache
Paste_Image.pngRedis
Paste_Image.png7. Redis事件机制
7.1 文件事件
读事件
1.客户端连上时绑定,状态等待
2.命令请求到达服务端时,状态变成就绪
写事件
1.服务端有信息返回给客户端,但客户端未能写,状态等待
2.服务端信息能返回给客户端,状态就绪
7.2 时间事件
1. Redis对自身资源状态的定时检查
7.3 事件机制
1.事件机制
2.无抢占
3.先文件事件、后时间事件
事件机制.png
8. Redis服务端初始化
1.初始化全局状态
2.载入配置文件
3.创建Daemon进程
4.初始化服务器功能模块
5.载入数据
6.开始事件循环
网友评论