Redis简介

Hiccup
发布于 2023-09-15 / 63 阅读
0
0

Redis简介

Java面试之Redis

Redis简介

主流架构:

Redis-主流应用架构.jpg

缓存中间件 — Memcache 和 Redis 的区别

Memcache:代码层次类似Hash

  • 支持简单的数据类型

  • 不支持数据持久化存储

  • 不支持主从

主从同步是MySQL数据库复制技术的一种应用,通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。在主从同步过程中,一台服务器充当主服务器(Master),接收用户数据更新,而另一台或多台服务器充当从服务器(Slave),接收来自主服务器的binlog内容,解析出SQL语句,从而使得主从服务器的数据保持一致。

  • 不支持分片,即Sharding

Sharding 即 将整个数据库打碎的过程,可理解为将大数据分布到多个物理节点上的分区方案。

分片(Sharding)是一种与水平切分(horizontal partitioning)相关的数据库架构模式。它将一个数据库表中的行分成多个不同的表(称为分区),每个分区都具有相同的模式和列,但数据行完全不同。这样,数据被分成多个较小的块(逻辑分片),然后分布在单独的数据库节点上(物理分片)。数据分布在不同节点上,但共同代表整个数据集,实现了数据库的横向扩展,以适应大量数据和高流量的需求。

Redis:

  • 数据类型丰富

  • 支持数据磁盘持久化存储

  • 支持主从

  • 支持分片(Redis 3.0 版本之后)

Redis 为什么这么快

官方公布:100000+QPS(QPS即 query per second,每秒内查询次数)

  • 完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高;

Redis采取的是单进程、单线程模型的 Key:Value 数据库,由C语言编写,它将数据存储在内存内,读写时不会受到硬盘I/O速度的限制。

  • 数据结构简单,对数据操作也简单;

Redis不使用*,不强制要求预定义数据结构,也不强制要求用户去对存储的不同数据进行关联,性能相比关系型数据库要高出不止一个量级。其存储结构就是键值对,类似于HashMap,HashMap的优势就是可以以O(1)的时间复杂度进行查找、插入和删除操作。

  • 采用单线程,单线程也能处理高并发请求,想多核也可启动多实例;

  • 使用多路 I/O 复用模型,非阻塞IO;

多路 I/O 复用模型

FD:File Descriptor,文件描述符

一个打开的文件通过唯一的描述符进行引用,该描述符是打开文件的元数据到文件本身的映射。

传统的阻塞 I/O 模型

阻塞IO模型.jpgSelect系统调用

Select系统调用.jpg

Redis采用的I/O多路复用函数

epoll / kqueue / evport / select ?

  • 因地制宜

  • 优先选择时间复杂度为 O(1) 的 I/O 多路复用函数作为底层实现

  • 以时间复杂度为 O(n) 的 Select 作为保底

  • 基于 react 设计模式监听 I/O 事件


评论