我与Redis的第一次

我与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
我与Redis的第一次_第1张图片
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.内存碎片少但浪费较大
我与Redis的第一次_第2张图片
Paste_Image.png

Redis

  1.动态分配内存块大小
redis动态分配内存.png

6. Redis分布式集群

Memcache

我与Redis的第一次_第3张图片
Paste_Image.png

Redis

我与Redis的第一次_第4张图片
Paste_Image.png

7. Redis事件机制

7.1 文件事件

读事件

1.客户端连上时绑定,状态等待
2.命令请求到达服务端时,状态变成就绪

写事件

1.服务端有信息返回给客户端,但客户端未能写,状态等待
2.服务端信息能返回给客户端,状态就绪

7.2 时间事件

1. Redis对自身资源状态的定时检查

7.3 事件机制

1.事件机制
2.无抢占
3.先文件事件、后时间事件
我与Redis的第一次_第5张图片
事件机制.png

8. Redis服务端初始化

1.初始化全局状态
2.载入配置文件
3.创建Daemon进程
4.初始化服务器功能模块
5.载入数据
6.开始事件循环

你可能感兴趣的:(我与Redis的第一次)