当前位置: 首页 > news >正文

【每日八股】Redis篇(一):概述

Redis 为什么快?

一句话概括:
Redis 之所以快,主要是因为它是基于内存操作的,避免了磁盘 I/O 的开销;采用单线程模型,避免了上下文切换和锁竞争;使用了高效的数据结构和紧凑的编码方式支持非阻塞 I/O 和异步持久化,能够高效处理并发请求;同时,Redis 的网络协议简单,减少了传输和解析的开销

具体来说:

  • 基于内存的操作:Redis 的绝大部分操作在内存当中就可以实现,数据也存储在内存当中,与传统的磁盘文件操作相比减少了 I/O,提高了操作速度;
  • 高效的数据结构:Redis 有专门的 STRING、LIST、HASH 等高效数据结构,依赖各种数据结构提升了读写的效率;
  • 采用单线程:单线程操作省去了上下文切换带来的开销以及 CPU 的消耗,同时不存在资源竞争,避免了死锁现象的发生。
  • I/O 多路复用:采用 I/O 多路复用机制同时监听多个 Socket,根据 Socket 上的事件来选择对应的事件处理器进行处理。

为什么 Redis 是单线程?

Redis 采用单线程模型主要是为了避免上下文切换和锁竞争,简化代码实现和维护;同时,Redis 使用高效的事件驱动模型和非阻塞 I/O,能够处理大量并发连接;内存操作本身已经很快,单线程足以满足性能需求。尽管是单线程,Redis 仍然能够支持极高的吞吐量和低延迟。

Redis 为什么要引入多线程?

Redis 引入多线程主要是为了优化网络 I/O 性能,解决单线程在高并发场景下的瓶颈问题;同时,多线程能够提高吞吐量,充分利用多核 CPU 的计算能力,并并行化后台任务(如持久化、异步删除等),避免阻塞主线程。需要注意的是,Redis 的核心操作仍然是单线程的,以确保原子性和一致性。

为什么用Redis作为MySQL的缓存?

使用 Redis 作为 MySQL 的缓存可以显著提升系统性能,减少数据库负载。Redis 基于内存,访问速度快,能够缓存热点数据,减少对 MySQL 的查询;同时,Redis 支持高并发和丰富的数据结构,能够灵活缓存不同类型的数据,并通过缓存失效和更新机制保证数据的一致性。此外,Redis 的高可用性和持久化功能也确保了数据的安全性。

使用 Redis + MySQL 结合的方式可以有效地提高系统的 FPS。

实际应用场景

  • 热点数据缓存:将频繁访问的数据(如商品信息、用户信息)缓存到 Redis 中,减少对 MySQL 的查询;
  • 会话缓存:将用户的会话信息(如登录状态)缓存到 Redis 中,避免每次请求都查询 MySQL;
  • 排行榜和计数器:利用 Redis 的有序集合(ZSet)和计数器功能,可以实现排行榜和计数功能,避免频繁更新 MySQL
  • 分布式锁:使用 Redis 实现分布式锁,避免多个服务同时操作 MySQL 中的同一个资源。

Redis 和 Memcached 的联系和区别?

在这里插入图片描述
Redis 和 Memcached 都是高性能的内存缓存系统,但 Redis 支持多种数据结构和持久化,适合需要丰富功能的场景;而 Memcached 仅支持简单的键值对,性能更高,适合简单的缓存场景。Redis 适合需要复杂数据操作和持久化的场景,而 Memcached 适合需要极高吞吐量的简单缓存场景。

如何理解 Redis 原子性操作原理?

  • API:Redis 提供的 API 都是单线程串行处理的;
  • 网络模型:采用单线程的 epoll 的网络模型,用来处理多个 Socket 请求;
  • 请求处理:Redis 会 fork 子进程来处理类似于 RDB 和 AOF 的操作,不影响主进程工作。

RDB 和 AOF

RDB(Redis Database)和 AOF(Append-Only File)是 Redis 中两种不同的持久化机制,用于将内存中的数据保存到磁盘,以防止数据丢失。
在这里插入图片描述

相关文章:

  • 计算机毕设-基于springboot的汽车配件销售管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • rust学习笔记4-基础类型2和内存管理模型
  • ike-scan:发现并指纹识别 IKE 主机(IPsec VPN 服务器)!全参数详细教程!Kali Linux教程!黑客教程!
  • 解决jupyter notebook不是内部或外部命令问题
  • 正则表达式--捕获exec方法
  • Grouped-Query Attention(GQA)详解: Pytorch实现
  • 红帽7基于kickstart搭建PXE环境
  • 【MySQL 一 数据库基础】深入解析 MySQL 的索引(3)
  • redis-bitmap使用场景
  • CSS中的`position`属性的几种定位方式
  • 计算机视觉算法实战——三维重建(主页有源码)
  • Linux提权之suid提权(六)
  • Python--函数进阶(下)
  • SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
  • Http模块及练习
  • C++单例模板类,继承及使用
  • C语言宏定义的底层应用
  • 【SpringMVC】概述 SSM:Spring + SpringMVC + Mybats
  • 在CentOS安装Docker
  • Redis常用数据类型及其应用案例
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • 十二届上海市委第六轮巡视全面进驻,巡视组联系方式公布
  • 莫名的硝烟|“我们最好记住1931年9月18日这个日子”
  • 解放日报:中国大模型企业的发展机遇已经到来
  • 巴西外长维埃拉:国际形势日益复杂,金砖国家必须发挥核心作用
  • 深入贯彻中央八项规定精神学习教育中央指导组派驻地方和单位名单公布