You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.2 KiB

Subject

Introduction:收纳专题相关的知识总结!

[TOC]

Redis

线程模型

Redis内部使用文件事件处理器File Event Handler这个文件事件处理器是单线程的所以Redis才叫做单线程的模型。它采用I/O多路复用机制同时监听多个Socket将产生事件的Socket压入到内存队列中事件分派器根据Socket上的事件类型来选择对应的事件处理器来进行处理。文件事件处理器包含5个部分

  • 多个Socket
  • I/O多路复用程序
  • Scocket队列
  • 文件事件分派器
  • 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

客户端与redis的一次通信过程

Redis请求过程

  • 请求类型1客户端发起建立连接的请求

    • 服务端会产生一个AE_READABLE事件IO多路复用程序接收到server socket事件后将该socket压入队列中
    • 文件事件分派器从队列中获取socket交给连接应答处理器创建一个可以和客户端交流的socket01
    • 将socket01的AE_READABLE事件与命令请求处理器关联
  • 请求类型2客户端发起set key value请求

    • socket01产生AE_READABLE事件socket01压入队列
    • 将获取到的socket01与命令请求处理器关联
    • 命令请求处理器读取socket01中的key value并在内存中完成对应的设置
    • 将socket01的AE_WRITABLE事件与命令回复处理器关联
  • 请求类型3服务端返回结果

    • Redis中的socket01会产生一个AE_WRITABLE事件压入到队列中
    • 将获取到的socket01与命令回复处理器关联
    • 回复处理器对socket01输入操作结果如ok。之后解除socket01的AE_WRITABLE事件与命令回复处理器的关联

效率高

  • 纯内存操作数据存放在内存中内存的响应时间大约是100纳秒这是Redis每秒万亿级别访问的重要基础
  • 非阻塞的I/O多路复用机制Redis采用epoll做为I/O多路复用技术的实现再加上Redis自身的事件处理模型将epoll中的连接读写关闭都转换为了时间不在I/O上浪费过多的时间
  • C语言实现:距离操作系统更近,执行速度会更快
  • 单线程避免切换开销:单线程避免了多线程上下文切换的时间开销,预防了多线程可能产生的竞争问题

数据结构

热点数据

双写一致性

如何保证缓存和数据库的双写一致性?

缓存问题

缓存雪崩

缓存击穿

缓存穿透

Netty

线程模型

单机支持百万连接

长连接心跳保活机制

时间轮

MySQL

数据结构

内存设计

索引设计

RocketMQ

Thread Pool

Register

多数据中心方案

百万服务访问

问题定位

CPU飙高

内存飙高

频繁GC

死锁

服务治理

限流

固定时间窗口

滑动时间窗口

漏桶算法

令牌桶算法

分布式限流

熔断

降级