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

性能比拼: Redis vs Memcached

本内容是对知名性能评测博主 Anton Putra Redis vs Memcached Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准

在本视频中,我们将对比 RedisMemcached。我会介绍一些功能上的不同,但主要关注 性能

首先,我们会衡量缓存系统最重要的指标之一---延迟(latency),使用 p99 百分位数。缓存系统最常见的操作是 set(写入)get(读取),因此我们将重点测试这两个操作。此外,我们还会衡量:

  • 吞吐量(throughput):即每秒可处理的操作数
  • 饱和度(saturation):通过监控 CPU 使用率、内存使用率 以及 网络流量 来评估

所有测试均在 AWS 上运行,并使用与生产环境完全相同的基础设施。本次测试中,我们使用 m7a.medium 实例来运行 Redis 和 Memcached。众所周知,Redis 主要依赖 单线程,因此垂直扩展能力有限。

接下来,我会介绍测试设计。此外,我还使用了 EKS(Elastic Kubernetes Service) 集群,运行 Graviton 实例来部署监控组件,同时运行客户端以模拟负载。


什么是缓存?

假设你有一个典型的 三层架构

  1. 客户端层:可能是浏览器或移动应用
  2. 逻辑层:运行应用程序和业务逻辑
  3. 数据层:用于持久化存储数据

举个例子,假设你运营一个 电商网站,所有 用户数据商品信息 都存储在 关系型数据库 中。每当客户登录账户时,你需要展示他们的 姓名、收货地址 以及其他详细信息。

这些数据并不会频繁变更,但每次请求时,仍然需要查询数据库。如果你的用户数量较少,这还可以接受,但如果有成千上万的用户,这些查询 会变得越来越慢

解决方案是:
当用户登录时,查询数据库并将数据存储在缓存中(例如 60 秒)
这样可以 提高用户体验,加快网站加载速度,并减少数据库负载。

你还可以缓存其他 SQL 查询,比如 最畅销商品,以便在首页展示。这就是缓存系统最初解决的问题---缓存 SQL 查询结果,存入临时存储。

之后,缓存系统的使用场景不断扩展,并发展出了 持久化存储 等额外功能。

目前,Memcached 仍主要用于 缓存数据库查询,而 Redis 则发展出了 丰富的功能集


测试设计

为了保证测试的公平性,我每次都会使用 Terraform 创建所有基础设施。

  • 本次测试使用 medium(中等)实例,因为 Redis 是单线程的,只能通过 水平扩展(Redis 集群) 进行扩展。
  • 另外,我创建了一个 EKS 集群,并部署 Prometheus、Grafana 等监控组件,还配置了 每种缓存 20 个客户端 来模拟负载。
  • 我会 逐步增加客户端数量,直到 Redis 和 Memcached 都达到极限
  • 每次测试通常运行 1.5 - 2 小时

配置概览

  • 我使用当前最新版本:

  • Redis 7.4.1
  • Memcached 1.6.32

  • Redis
    • 采用最小化配置,保留大部分默认设置
    • 禁用持久化
    • 最大连接数设为 10,000

  • Memcached

    • 默认内存从 64MB 增加到 4GB(与 VM 限制一致)
    • 最大连接数同样设为 10,000
  • 客户端

  • 使用 Go 语言开发
  • 内部集成 Prometheus 指标
  • 采用 最流行、最高效的驱动
  • 不使用内部缓存指标,而是通过 相同的直方图桶 从客户端端测量延迟,以确保测试更加准确。

第一次测试

接下来,我们开始运行测试。

在下方的图表中,你可以看到我们逐步增加客户端数量。

Redis 的 set(写入)延迟从一开始就比 Memcached 略慢,但 get(读取)延迟在最初几分钟几乎相同
然而,当负载增加时,情况开始发生变化

  • CPU 使用率 在整个测试过程中几乎相同
  • 内存使用情况 也相似,但呈现出不同的模式:
    • set 操作设置 20 秒的过期时间,因此 Redis 和 Memcached 每 20 秒都会删除数据
    • 两者的内存清理方式不同
  • 网络传输的数据量 也有一些不同

当操作数达到 50,000 次/秒 时,Redis 开始落后于 Memcached,并且 延迟上升到 10 - 15 毫秒
相比之下,Memcached 在整个测试过程中保持稳定

在网络上,你可能会看到 Memcached 的性能比 Redis 更强,但 延迟才是最关键的指标
更高的延迟意味着网页加载更慢,最终影响用户体验。

尽管 Redis 具有丰富的功能,但你真的需要它们吗?

Redis 集群难以扩展和维护,你可能需要不断添加 新的分片(shard) 并进行 重新平衡
通常,很多人一开始自己管理 Redis,但随着负载增加,他们会转向 Redis 集群
经历几次 生产事故 后,最终可能会选择 昂贵的托管 Redis(AWS 或其他云服务)

相比之下,Memcached 非常容易运行,如果你 只是想缓存 SQL 查询 以加速数据库,Memcached 是一个不错的选择


测试结果

在 CPU 资源耗尽之前:

  • Redis 最高处理能力:94,000 请求/秒
  • Memcached 最高处理能力:112,000 请求/秒

最重要的还是延迟
根据本次测试结果,你可以自己决定:

  • 是选择简单、低延迟的 Memcached
  • 还是选择功能强大的 Redis

请记住,维护 Redis 集群非常困难,很多公司甚至专门雇人 只负责维持 Redis 的正常运行



现在,我们查看整个测试期间的各项指标:

  1. 每秒操作数(Operations per second)

  • 50,000 ops/sec 时,Redis 和 Memcached 的性能开始出现差异
  • 可以清楚地看到 每种缓存的最大处理能力
  1. SET(写入)操作的延迟

  • 延迟差异 非常明显
  • 在 Redis 过载时,延迟甚至接近 SQL 查询本身的延迟(35ms)
  • 但在 CPU 使用率低于 15% 时,两者的延迟都很稳定且较低
  1. GET(读取)操作的延迟

  • 趋势类似,但 GET 操作的平均时间约为 SET 操作的一半
  • Redis 最高 GET 延迟约为 20ms
  1. CPU 使用率

  • 两者表现几乎相同,在 CPU 满载前都能维持稳定
  1. 内存使用

  • 两者模式稍有不同
  1. 网络使用

  • 有一定的区别

总结

这些测试都使用的是 默认配置
如果你能优化 Redis 或 Memcached,欢迎提交 PR(Pull Request),我会给予 署名,并分享如何改进性能。

相关文章:

性能比拼: Redis vs Memcached

本内容是对知名性能评测博主 Anton Putra Redis vs Memcached Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中,我们将对比 Redis 和 Memcached。我会介绍一些功能上的不同,但主要关注 性能。 首先&#xf…...

Mujoco xml actuator

actuator general(通用执行器)motor(电机执行器)position(位置伺服)velocity(速度伺服)intvelocity(积分速度伺服)damper(主动阻尼器)…...

Mybatis Plus分页查询返回total为0问题

概述 最近开发公司新项目,使用 Mybatis Plus 分页,发现总数和总页数为0,在此记录问题和解决方案。 添加 MybatisPlusConfig /*** author: lanys* version: 1.0* 创建时间:2025年4月9日 14:24:40* Description: MybatisPlus分页…...

多卡分布式训练:torchrun --nproc_per_node=5

多卡分布式训练:torchrun --nproc_per_node=5 1. torchrun 实现规则 torchrun 是 PyTorch 提供的用于启动分布式训练作业的实用工具,它基于 torch.distributed 包,核心目标是简化多进程分布式训练的启动和管理。以下是其主要实现规则: 进程启动 多进程创建:torchrun 会…...

网络层-IP地址计算

例1:IP地址二进制与十进制互转 题目: 将二进制IP 11000000.10101000.00000001.00001010 转换为点分十进制。将IP地址 172.16.254.1 转换为二进制格式。 答案与解析: 转换步骤: 每个8位二进制转为十进制: 11000000 →…...

BeagleBone Black笔记

目录 参考资料开机led控制GPIO输入输出插网线联网安装gcc编译工具镜像备份验证备份完整性将内存卡插入目标BBBboot启动开关 参考资料 链接: BeagleBone Black使用(一):狗板简介 链接: 使用Beaglebone Black的IO口 开机 直接用usb连接到电脑…...

【25软考网工笔记】第一章 计算机网络概述

目录 一、计算机网络发展与分类 1. 计算机网络形成和发展 1)ICT 2)计算机网络的发展 3)我国互联网发展 2. 计算机网络分类 1)通信子网和资源子网 2)PAN、LAN、MAN、WAN 3)其他分类方式 3. 计算机…...

Soybean Admin 配置vite兼容低版本浏览器、安卓电视浏览器(飞视浏览器)

环境 window10 pnpm 8.15.4 node 8.15.4 vite 5.1.4 soybean admin: 1.0.0 native-ui: 2.38.0 小米电视 MIUI TV版本:MiTV OS 2.7.1886(稳定版) 飞视浏览器:https://www.fenxm.com/1220.html在小米电视安装飞视浏览器可以去小红书查安装教程&#xff1a…...

MicroPython 开发ESP32应用教程 之 I2S、INMP441音频录制、MAX98357A音频播放、SD卡读写

本课程我们讲解Micropython for ESP32 的i2s及其应用,比如INMP441音频录制、MAX98357A音频播放等,还有SD卡的读写。 一、硬件准备 1、支持micropython的ESP32S3开发板 2、INMP441数字全向麦克风模块 3、MAX98357A音频播放模块 4、SD卡模块 5、面包板及…...

从零到一:基于DeepSeek-R1的智能贪吃蛇开发实战

《基于DeepSeek-R1的AI驱动高性能贪吃蛇游戏开发全流程解析》 一、技术选型与环境搭建 开发工具链 • 编辑器:VSCode/Sublime(支持代码生成插件) • 运行环境:Node.js v16+(用于API调用及后端服务) • 图形库:HTML5 Canvas(网页端)或OLED驱动(单片机场景) • AI引擎…...

数据结构与算法-动态规划-区间dp,状态机dp,树形dp

3-区间 DP 介绍 通常用 (dp[i][j]) 表示区间 ([i, j]) 上的某种最优值,比如 (dp[i][j]) 可以表示从下标 (i) 到 (j) 的元素进行某种操作所得到的最大收益、最小花费等。 状态转移方程:这是区间 DP 的关键。它描述了如何从较小的区间的最优解得到较大区…...

文件内容课堂总结

Spark-Core编程 Key-Value类型: partitionBy函数根据指定Partitioner重新进行分区,默认使用HashPartitioner groupByKey函数根据key对value进行分组,有三种函数签名 reduceByKey函数将数据按相同Key对Value进行聚合,与groupByKey相…...

【树莓派Pico FreeRTOS】-任务通知

任务通知 文章目录 任务通知1、硬件准备2、软件准备3、FreeRTOS的任务通知介绍4、任务通知数据传输实例RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (…...

c++11新内容补充

1.列表初始化 1.1传统{ }初始化 c98的{ }初始化主要是用于数组,以及结构体 1.2c11{ }初始化 1.让内置类型和自定义类型都可以用{ }实现多个数据初始化,而自定义类型的实现原理是类型转换(没优化的版本是先构造临时对象,然后拷贝构…...

动态规划基础

动态规划 动态规划概论楼梯最短路最长上升子序列(LIS)最长公共子序列(LCS)最长回文子串 概率动态规划区间动态规划石子合并括号序列石子合并(环形) 树形动态规划统计人数没有上司的舞会 背包01背包完全背包多重背包分组背包 动态规…...

导入 Excel 批量替换文件名称及扩展名

重命名的需求是多种多样的,我们一个方法或一个工具很难说完全满足 100% 的文件重命名的需求。如果我们的文件重命名的需求非常的复杂的时候,我们能否有一个万全的方法来帮我们实现呢?那今天就给大家介绍一下导入 excel 的方式批量修改文件名称…...

降低AIGC检测率的AI润色提示词模板

以下是针对降低AIGC检测率的 AI润色提示词模板,涵盖语言风格优化、逻辑重构、学术规范强化等维度,结合反检测策略设计,可直接用于DeepSeek等工具: 一、标题与摘要优化 1. 标题去AI化 提示词: 请将以下标题改写成更学…...

系统思考—提升解决动态性复杂问题能力

感谢合作伙伴的信任推荐! 客户今年的人才发展重点之一,是提升管理者应对动态性、复杂性问题的能力。 在深入交流后,系统思考作为关键能力模块,最终被纳入轮训项目——这不仅是一次培训合作,更是一场共同认知的跃迁&am…...

spring--整合Mybatis详解

整合Mybatis 步骤&#xff1a; 1.导入相关Maven依赖 junit mybatis mysql数据库连接 spring相关的 aop织入 mybatis-spring 2.编写配置文件 3.测试 回忆mybatis 还需连接数据库 导入依赖&#xff1a; <dependencies><dependency><groupId>juni…...

深入理解 HTML5 Audio:网页音频播放的新时代

在网页开发领域,音频的嵌入和播放一直是一个重要且不断演进的话题。HTML5 的出现,为网页音频播放带来了标准化的解决方案,极大地改善了开发者和用户的体验。 一、HTML5 之前的音频播放状况 在 HTML5 诞生之前,互联网上缺乏统一的网页音频播放标准。当时,大多数音频播放依…...

Cloudflare 缓存工作原理

Cloudflare 缓存是 Cloudflare 内容分发网络&#xff08;CDN&#xff09;的一个关键组成部分&#xff0c;通过在靠近用户的全球网络边缘服务器上存储和交付内容&#xff0c;显著提升网站性能。以下是关于 Cloudflare 缓存的相关内容&#xff1a; 工作原理 内容请求&#xff1a…...

【Unity3D中UI与物体可见性的判断方法】

系列文章目录 unity知识点 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、判断UI的可见性1-1、第一种1-2、通过RectTransform计算可视区域1-3、滚动容器内可见性检测&#xff08;Scroll View&#xff09; &#x1f449;二、判断物体的可见性2-1、视锥体检测方法2-2…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(1):承上启下,继续上路

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(1):承上启下,继续上路 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)普通形(ふつうけい)と思います(2)辞書形ことができます(3)Vたことがあります。(4)Vた とき & Vる とき3、单词(1)日语单词(2…...

ubuntu24.04 cmake 报错 libldap-2.5.so.0 解决办法

apt cmake有毛病 换源重新安装 wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" sudo apt update sudo apt in…...

Mac 关闭浏览器左右滑动切换页面的问题

在使用触控板&#xff0c;操作浏览器时&#xff0c;左右滑动时&#xff0c;浏览器容易触发前进或者后退去查看历史记录。 如何关闭呢&#xff1f; 打开Mac- 系统设置-触控板 -更多手势 将轻扫切换页面设置为关&#xff0c;就可以了...

在 openEuler 24.03 (LTS) 操作系统上添加 ollama 作为系统服务的步骤

以下是在 openEuler 操作系统上添加 ollama 作为系统服务的步骤&#xff1a; 创建 systemd 服务文件 sudo vi /etc/systemd/system/ollama.service将以下内容写入服务文件&#xff08;按需修改参数&#xff09;&#xff1a; [Unit] DescriptionOllama Service Afternetwork.…...

华为昇腾服务器上查看固件、驱动和CANN版本的常用方法

Hey小伙伴们~&#x1f44b; 今天来聊聊怎么在华为昇腾服务器上查看固件、驱动和CANN版本吧&#xff01;&#x1f4bb; 这些信息对于确保你的服务器运行顺畅可是超级重要的哦&#xff01;下面就来给大家介绍几种常用的查看方法&#xff01;&#x1f447; &#x1f31f; ‌1. 查…...

击球手怎么玩·棒球1号位

以棒球运动为例&#xff0c;在棒球运动中&#xff0c;击球手&#xff08;Batter&#xff09;是进攻方的核心角色&#xff0c;负责通过击球创造得分机会。以下是结合棒球运动的详细介绍和击球技巧指南&#xff1a; 一、棒球基础规则 比赛目标 击球手需将投手&#xff08;Pitch…...

java基础多态------面试八股文

是什么是多态 类引用指向子类对象&#xff0c;并调用子类重写的方法&#xff0c;实现不同的行为 例子 class Animal {void sound() {System.out.println("动物发出声音");} }class Dog extends Animal {Overridevoid sound() {System.out.println("狗叫&…...

Python中的字典

文章目录 一、Python中的字典1. 字典的特点2. 字典的创建3. 字典的常见操作1. **访问字典中的值**2. **修改字典中的值**3. **添加键值对**4. **删除键值对**5. **检查键是否存在**6. **获取字典的长度**7. **遍历字典** 4. 字典的方法5. 嵌套字典6. 字典的优点7. 示例总结 二、…...

C++对象生命周期管理:从构造到析构的完整指南

在C开发中&#xff0c;准确掌握对象的生命周期管理是避免内存泄漏和资源竞争的关键。本文通过完整代码示例和内存布局分析&#xff0c;深入解析构造/析构顺序、继承体系、智能指针等核心机制&#xff0c;并分享实用调试技巧。 一、成员变量构造顺序&#xff1a;声明即命运 cl…...

代码随想录第14天:(二叉树)

一、找树左下角的值&#xff08;Leetcode 513&#xff09; 递归法&#xff1a; class Solution:def findBottomLeftValue(self, root: TreeNode) -> int:# 初始化最大深度为 -1&#xff0c;表示当前尚未遍历任何节点# 初始化 result 为 None&#xff0c;最终将存储最左边的…...

TCP/UDP的连接和数据发送过程详解

TCP TCP三次握手 在服务端启动好后会调用 listen() 方法&#xff0c;进入到 LISTEN 状态&#xff0c;然后静静等待客户端的连接请求到来。 而此时客户端主动调用 connect(IP地址) &#xff0c;就会向某个IP地址发起第一次握手&#xff0c;会先建立个半连接&#xff0c;发送SYN…...

2. 单词个数统计

【问题描述】 编写一个程序&#xff0c;输入一个句子&#xff0c;然后统计出这个句子当中不同的单词个数。例如&#xff0c;对于句子“one little two little three little boys"&#xff0c;总共有5个不同的单词&#xff0c;one, little, two, three, boys。 说明&…...

Js生成螺旋数组。

这段代码定义了一个名为 vetux 的函数&#xff0c;用于生成一个螺旋矩阵。螺旋矩阵是一种按照螺旋顺序填充数字的二维数组。以下是代码的详细解释&#xff1a; 函数定义 function vetux(n, m) {// 创建一个 m 行 n 列的二维数组&#xff0c;初始值为 0const a new Array(m).…...

《Vue.js组件化开发实战:从安全纵深到性能跃迁》

开篇&#xff1a;组件化开发的工业革命 当全球500强企业的核心业务系统在12.12大促中经受每秒38万次请求冲击时&#xff0c;我们突然意识到&#xff1a;现代前端组件已不再是简单的UI积木&#xff0c;而是承载业务逻辑、安全防护、性能优化的纳米级作战单元。本文将从军工级系统…...

【Git】--- 多人协作实战场景

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; Git 前面我们学习了Git的所有本地仓库的相关操作:git基本操作,分支理解,版本回退,冲突解决等等。同时我们还理解了远端仓库在开发的作用以及相关操作push…...

SmolVLM2: The Smollest Video Model Ever(二)

这是对论文《SmolVLM: Redefining small and efficient multimodal models》的整理与翻译 SmolVLM&#xff1a;重新定义小型高效的多模态模型 拥抱脸、斯坦福大学 图1 小而强大&#xff1a;SmolVLM与其他最先进的小型视觉语言模型&#xff08;VLM&#xff09;的比较。图像结果来…...

如何通过前端表格控件实现自动化报表?1

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…...

数据库8(函数,变量)

1.数据类型 char(10):不足十个字符&#xff0c;用空格补全&#xff0c;数据定长&#xff1b;非统一字符编码&#xff0c;一个汉字要占两位char(2) nchar(10):不足十个字符&#xff0c;用空格补全&#xff0c;数据定长&#xff1b;统一字符编码&#xff0c;一个汉字占一位 nch…...

电阻式传感器(三)——电位器式传感器等效电路分析

(1)电位器式传感器的基本工作原理 将机械位移或其他可转换为位移变化的非电量转换为与其有一定函数关系的电阻变化&#xff0c;从而引起输出电压变化。 类型 基本结构 旋转型 直线型 非线性型 &#xff08;2&#xff09;电位器式传感器的等效电路分析 电位器式传感器的核…...

LangChain4j(1):初步认识Java 集成 LLM 的技术架构

LangChain 作为构建具备 LLM 能力应用的框架&#xff0c;虽在 Python 领域大放异彩&#xff0c;但 Java 开发者却只能望洋兴叹。LangChain4j 正是为解决这一困境而诞生&#xff0c;它旨在借助 LLM 的强大效能&#xff0c;增强 Java 应用&#xff0c;简化 LLM 功能在Java应用中的…...

力扣刷题——1339.分裂二叉树的最大乘积

给你一棵二叉树&#xff0c;它的根为 root 。请你删除 1 条边&#xff0c;使二叉树分裂成两棵子树&#xff0c;且它们子树和的乘积尽可能大。 由于答案可能会很大&#xff0c;请你将结果对 10^9 7 取模后再返回。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,6] 输…...

Pytest+Allure+Excel接口自动化测试框架实战

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具&#xff0c;它不仅以 Web 的方式展示了简介的测试结果&#xff0c;而且允…...

交易所开发全流程解析:KYC与U盾在安全合规中的战略价值

——2025年加密资产交易平台的技术架构与风控体系深度实践 一、交易所开发的核心技术架构与流程 1. 系统定位与合规基础 交易所开发需首先明确中心化&#xff08;CEX&#xff09;、去中心化&#xff08;DEX&#xff09;或混合架构的定位。中心化交易所&#xff08;如币安&…...

简单了解一下Unity的Resources.UnloadUnusedAssets

基本概念 Resources.UnloadUnusedAssets()是Unity提供的一个内存管理方法&#xff0c;用于卸载当前未被任何GameObject引用的资源&#xff0c;包括贴图、材质、网格、音频等资源。 在Unity中&#xff0c;资源在加载后会占用内存&#xff0c;而当这些资源不再被场景中的对象引…...

ECMAScript 7~10 新特性

ECMAScript 7 新特性 ECMAScript 6 新特性&#xff08;一&#xff09; ECMAScript 6 新特性&#xff08;二&#xff09; ECMAScript 7~10 新特性&#xff08;本文&#xff09; 1. 数组方法 Array.prototype.includes() 用来检测数组中是否包含指定元素&#xff0c;返回布尔值&…...

leetcode_1. 两数之和_java

1. 两数之和https://leetcode.cn/problems/two-sum/ 1、题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你…...

Mysql索引(四)

1、B树&#xff1a;B树即平衡查找树&#xff0c;一般理解为平衡多路查找树&#xff0c;也称为B-树、B_树。是一种自平衡树状数据结构&#xff0c;能对存储的数据进行O(log n)的时间复杂度进行查找、插入和删除&#xff1b; 1&#xff09;每个节点占用一个盘块的磁盘空间&#x…...

力扣——【1991. 找到数组的中间位置】

#前缀和思想 主要利用递推的思想&#xff0c;将数列的前n&#xff01;项和存到一个新数列中&#xff0c;递推公式可能需要自己推导 一个数列的值等于另一个数列的第i个元素加上这一个数列的第i-1个元素 同时需要初始化这个数列的第一个元素另一个数列的第一个元素 #思路 本…...