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

Redis数据库笔记——Redis快的原因

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍redis为什么这么快的原因,这里是本系列文章的总结篇(后面会补充一些内容,或者在原文上进行更新迭代),将从各方面出发解释为什么redis快,受欢迎的原因。

在这里插入图片描述

文章目录

    • 内存
      • 内存数据库
      • 预分配内存
    • 数据结构
      • 数据结构优化
      • 内存优化的编码
    • 持久化优化
      • AOF和RDB
    • 单线程
      • 单线程架构
    • 主从架构(部署模式)
      • 复制与分片
    • 其他
      • 管道化 (Pipelining)
      • 简单的协议
      • 总结:
    • 历史文章
      • MySQL数据库
      • Redis

Redis 的高性能主要归功于其以下几个设计和实现特性:

内存

详细内容参考本系列文章中的内存部分。

内存数据库

Redis 是一个 内存数据库,它将所有的数据存储在内存中,而不是磁盘上。内存访问速度远高于磁盘访问速度,这使得 Redis 在数据读写上非常快。

预分配内存

Redis 使用 内存池 来减少内存分配和回收的开销。内存池为 Redis 提供了高效的内存管理,避免了频繁的内存分配和回收操作,提高了性能。

数据结构

详细内容参考本系列文章中的数据结构部分。

数据结构优化

Redis 提供了多种高效的数据结构,如 字符串哈希列表集合有序集合 等。这些数据结构在内存中组织得非常紧凑,支持高效的操作,使得常见的数据存取操作能够在 O(1) 或 O(log N) 时间复杂度内完成。

内存优化的编码

Redis 使用 内存优化的编码,它根据数据类型和大小自动选择合适的内存存储格式。通过高效的内存布局和压缩技术,Redis 能够在较低的内存开销下存储大量的数据。

持久化优化

详细内容参考本系列文章中的持久化优化部分。

AOF和RDB

虽然 Redis 是一个内存数据库,但它也提供了 持久化机制(如 RDB 快照和 AOF 日志),以保证数据的可靠性和在重启后的恢复能力。这些持久化操作设计得非常高效,不会影响 Redis 的实时性能。尤其是 AOF 的重写机制,通过将命令合并成较小的增量日志,减少了磁盘的写入量。

单线程

详细内容参考本系列文章中的单线程和并发请求部分。

单线程架构

Redis 使用 单线程 来处理客户端请求,这意味着 Redis 在处理请求时不需要上下文切换和锁竞争。虽然现代多核 CPU 可以并行处理多个线程,Redis 通过单线程的事件驱动模型实现了高效的请求处理,避免了多线程中的复杂性和潜在性能瓶颈。

  • Redis 使用 I/O 多路复用事件驱动模型,可以同时处理多个客户端连接,而不需要多线程的切换。这种方式消除了线程切换的开销,提高了性能。

主从架构(部署模式)

详细内容参考本系列文章中的部署模式部分。

复制与分片

Redis 支持 主从复制,即一个主节点可以将数据复制到多个从节点,从节点的读请求可以分担主节点的负载,提高了读的性能。同时,Redis 也支持 分片(Sharding),将数据分布到多个 Redis 实例中,进一步提高了性能和可扩展性。

其他

管道化 (Pipelining)

Redis 支持 管道化,即可以将多个命令批量发送到 Redis 服务器,而不需要等待每个命令的响应。这种方式减少了网络延迟,提高了吞吐量。管道化使得 Redis 可以一次性处理多个命令,避免了每次操作的网络延迟。

简单的协议

Redis 使用一种简单、紧凑的协议(RESP,Redis Serialization Protocol)来进行客户端与服务器之间的通信。与其他复杂的协议相比,RESP 协议在解析时效率非常高,避免了大量的计算和内存开销。

总结:

Redis 的快速性能来自于内存存储、高效的数据结构设计、单线程事件驱动机制、优化的 I/O 操作和持久化策略。通过这些设计,它能在处理大量请求时保持高效,尤其在需要低延迟和高吞吐量的场景中表现出色。

历史文章

MySQL数据库

  1. MySQL数据库笔记——数据库三范式
  2. MySQL数据库笔记——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)
  3. MySQL数据库笔记——常见的几种锁分类
  4. MySQL数据库笔记——索引介绍
  5. MySQL数据库笔记——事务介绍
  6. MySQL数据库笔记——索引结构之B+树
  7. MySQL数据库笔记——索引潜规则(回表查询、索引覆盖、索引下推)
  8. MySQL数据库笔记——索引潜规则(最左前缀原则)
  9. MySQL数据库笔记——常见慢查询优化方式
  10. MySQL数据库笔记——日志介绍
  11. MySQL数据库笔记——多版本并发控制MVCC
  12. MySQL数据库笔记——主从复制

Redis

  1. Redis数据库笔记——数据结构类型
  2. Redis数据库——Redis雪崩、穿透、击穿
  3. Redis数据库——内存淘汰机制
  4. Redis数据库笔记——内存分配器
  5. Redis数据库笔记——内存预分配
  6. Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)
  7. Redis数据库笔记——ZSet的底层实现(跳表)
  8. Redis数据库笔记——布隆过滤器(BloomFilter)
  9. Redis数据库笔记——持久化机制
  10. Redis数据库笔记——部署模式
  11. Redis数据库笔记——主从复制
  12. Redis数据库笔记——Sentinel哨兵机制
  13. Redis数据库笔记——Cluster集群模式
  14. Redis数据库笔记——单线程和并发请求

http://www.kler.cn/a/488301.html

相关文章:

  • 鼠标自动移动防止锁屏的办公神器 —— 定时执行专家
  • 解决idea中无法拖动tab标签页的问题
  • Kivy,跨平台UI的艺术家
  • 【算法刷题】leetcode hot 100 滑动窗口
  • 使用ElasticSearch查询
  • 计算机网络 笔记 物理层
  • Java(day7)
  • HTTP 与 HTTPS 网络传输
  • Linux -- 初步了解 TCP 编程
  • ubuntu 20.04 安装 5.4 内核
  • CClinkIEfield Basic转Modbus TCP网关模块连接三菱FX5U PLC
  • 关于物联网的基础知识(四)——国内有代表性的物联网平台都有哪些?
  • xml-dota-yolo数据集格式转换
  • 【FPGA】时序约束与分析
  • 部署langchain服务
  • 使用 FastAPI 和 Async Python 打造高性能 API
  • 超大规模分类(三):KNN softmax
  • cJson——序列化格式json和protobuf对比
  • 单元测试MockitoExtension和SpringExtension
  • poi处理多选框进行勾选操作下载word以及多word文件压缩
  • Cognitive architecture 又是个什么东东?
  • 【Rust自学】11.7. 按测试的名称运行测试
  • 记录一个移动端表格布局,就是一行标题,下面一列是对应的数据,一条一条的数据,还有点击数据进入详情的图标,还可以给一列加input输入框,还可以一对多
  • dubbo3 负载均衡
  • js迭代器模式
  • python+camelot库:提取pdf中的表格数据