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

Redis 缓存

缓存介绍

Redis 最主要三个用途:

1)存储数据(内存数据库)

2)消息队列

3)缓存

对于硬件的访问速度,通常有以下情况:

CPU 寄存器  >  内存  >  硬盘  >  网络

缓存的核心思想就是,把一些常用的数据放到访问速度更快的地方,方便随时读取

对于计算机硬件来说,往往访问速度更快的设备,成本越高,存储空间越小

缓存也是如此,访问速度快,但是存储空间小,只能存储一些热点数据

二八定律:20%的热点数据,能够应对80%的访问场景

只需要把少量的热点数据缓存起来,就可以应对大多数的场景

使用 Redis 作为 MySQL 的缓存

在大部分项目中,都会使用关系型数据库(MySQL ..)来存储数据

关系型数据库虽然功能强大,但是性能不高(进行一次查询操作消耗的系统资源较多)

1)数据库把数据存储在硬盘上,硬盘的 IO 速度并不快,尤其是随机访问

2)如果查询不能命中,就需要进行表的遍历,会大幅增加硬盘 IO 次数

3)关系型数据库对于 SQL 的执行会做一系列的解析,校验,优化工作

4)一些比较复杂的查询,例如联合查询,需要进行笛卡尔积操作,效率更是较低很多

如果访问数据库的并发量比较高,对于数据库的压力会很大,容易使数据库服务器宕机

服务器每次处理请求,都需要消耗一定的硬件资源,包括但不限于 CPU,内存,硬盘,网络带宽  ..

一个服务器的硬件资源本身是有限的,一个请求消耗一份资源,随着请求的不断产生,自然把资源耗尽了。后续的请求没有资源可用,无法进行正常的处理,严重的会造成服务器崩溃

提高 MySQL 能承担的并发量 ——>

1)开源:引入更多机器,构成数据库集群

2)节流:引入缓存,把一些频繁读取的热点数据保存到缓存上

Redis 数据存储在内存中,访问内存比访问硬盘更快

Redis 只是支持 简单的 key-value 存储,不涉及复杂的查询规则

缓存的更新策略

1)定期生成

每隔一段时间,对于访问的数据频次进行统计,挑选出访问频次靠前的数据

以搜索引擎为例:

把用户访问的数据,通过日志的形式记录下来,按照不同的统计维度来定期更新

可以写一套离线的流程(往往使用 shell,python 写脚本代码),可以通过 定时任务 来触发

a) 完成统计热词的过程

b) 根据热词,找到搜索结果的数据

c) 把得到的缓存数据同步到缓存服务器上

d) 控制这些缓存服务器自动启动

优点:实现比较简单,过程可控,方便排查问题

缺点:实时性不够,不能处理突发情况

以上数据的统计可能会非常大,需要使用分布式的系统来春初这些日志(HDFS)

再使用 hadoop 的 map-reduce 来写代码进行统计,或使用基于 HDFS 的 HBASE 这样的数据库来写 sql 统计

2)实时生成

缓存会设有容量上限(通过 Redis 的配置文件的 maxmemory 参数设定)

接下来每用户查询:

如果在 Redis 查到了,就直接返回

如果在 Redis 中不存在,就从数据库中查,把查询到的结果同时写入 Redis

一段时间后会达到存储的上限,触发 “内存淘汰策略”

通常的淘汰策略:

FIFO  (First In First Out)  先进先出

把缓存中存在时间最久的淘汰掉

LRU  (Least Recently Used)  淘汰最久未使用的

记录每个 key 的最近访问时间,把最近访问时间最远的 key 淘汰掉

LFU  (Least Frequently)  淘汰访问次数最少的

记录每个 key 最近一段时间的访问次数,把访问次数最少的淘汰掉

Random  随机淘汰

从所有 key 中随机淘汰掉一个

Redis 也提供了内置的淘汰策略,可以直接使用

volatile-lru 当内存不足以容纳新写入数据时,从设置了过期时间的 key 中使用 LRU(最近最少使用)算法进行淘汰
allkeys-lru 当内存不足以容纳新写入数据时,从所有key中使用 LRU 算法进行淘汰
volatile-lfu 4.0版本新增,当内存不足以容纳新写入数据时,在过期的key中,使用 LFU 算法进行删除key
allkeys-lfu 4.0版本新增,当内存不足以容纳新写入数据时,从所有key中使用 LFU 算法进淘汰
•  volatile-random 当内存不足以容纳新写入数据时,从设置了过期时间的key中,随机淘汰数
allkeys-random 当内存不足以容纳新写入数据时,从所有key中随机淘汰数据
volatile-ttl 在设置了过期时间的 key 中,根据过期时间进行淘汰,越早过期的优先被淘汰
(相当于 FIFO, 只不过是局限于过期的 key)
noeviction 默认策略,当内存不足以容纳新写入数据时,新写入操作会报错
整体来说 Redis 提供的策略和我们上述介绍的通用策略是基本一致的. 只不过 Redis 这里会针对 "过期 key " 和 "全部 key " 做分别处理

缓存使用注意事项

缓存预热 (Cashe preheating)

Redis 服务器首次接入数据库,服务器里没有数据,此时所有的请求都会打给 MySQL,随着时间的推移,Redis 上的数据越来越多,MySQL 承担的压力就逐渐减小  (实时生成)

客户端先查询 Redis,如果没查到就再查一次 MySQL,查到后会把数据写入 Redis

把 定期生成 和 实时生成 结合

先通过离线的方式,通过一些统计途径,先找到一些热点数据导入到 Redis 中,此时导入的这些热点数据,就能帮 MySQL 承担很大一部分压力,随着时间的推移,Redis 中也会用新的热点数据淘汰一些旧的数据

缓存穿透  (Cashe penetration)

访问的 key 在 Redis 和 MySQL 中都不存在,这样的 key 不会被放到缓存中,后续如果仍然在访问这个 key,依然会访问到 MySQL,会增加 MySQL 承担的请求压力

产生原因:

1)业务设计不合理,比如缺少必要的参数校验环节,导致非法的 key 也被查询

2)不小心把部分数据从数据库上误删

3)黑客恶意攻击

解决方案:

1)发现某个 key 在 Redis 和 MySQL 上都不存在,仍写入到 Redis 中,把 value 设置成 “”

2)引入布隆过滤器,每次查询 Redis / MySQL 之前,判定 key 是否在布隆过滤器上存在

布隆过滤器,本质上是结合了 hash + bitmap

以较小的空间开销,比较快的速度,实现针对 key 是否存在的判定

缓存雪崩  (Cashe avalanche)

在短时间内,Redis 上大规模的 key 失效,导致缓存命中率陡然下降,导致 MySQL 压力迅速上升,甚至宕机

产生原因:

1)Redis 直接挂了

Redis 宕机 / Redis 集群模式下大量节点宕机

2)Redis 运行良好,但是短时间内大量节点同时过期

给 Redis 设置 key 作为缓存时,为了考虑缓存的时效性,会设置过期时间,和 Redis 内存淘汰机制配合使用

解决方案:

1)部署高可用的 Redis 集群,完善监控报警机制

2)不给 key 设置过期时间 / 设置过期时间时添加随机的因子(避免同一时间过期)

缓存击穿  (Cache breakdown)

热点 key 突然过期,导致大量的请求直接打到 MySQL 上

1)基于统计的方式发现热点 key,并设置永不过期

往往需要服务器结构做出较大的调整

2)进行必要的服务降级,例如访问数据库时使用分布式锁,限制同时访问数据库的并发数

通过分布式锁,限制数据库的访问频率

在特定情况下,适当关闭一些不重要的功能,只保留核心功能(服务降级)——> 省点模式

相关文章:

Redis 缓存

缓存介绍 Redis 最主要三个用途: 1)存储数据(内存数据库) 2)消息队列 3)缓存 对于硬件的访问速度,通常有以下情况: CPU 寄存器 > 内存 > 硬盘 > 网络 缓存的核心…...

Apache Flink 与 Flink CDC:概念、联系、区别及版本演进解析

Apache Flink 与 Flink CDC:概念、联系、区别及版本演进解析 在实时数据处理和流式计算领域,Apache Flink 已成为行业标杆。而 Flink CDC(Change Data Capture) 作为其生态中的重要组件,为数据库的实时变更捕获提供了强大的能力。 本文将从以下几个方面进行深入讲解: 什…...

缓存(4):常见缓存 概念、问题、现象 及 预防问题

常见缓存概念 缓存特征: 命中率、最大元素、清空策略 命中率:命中率返回正确结果数/请求缓存次数 它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高。 最大元素(最大空间):缓存中可以存放的最大元素的…...

实战项目6(09)

目录 任务场景一 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景二 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景三 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景一 按照下图完成网络拓扑搭建和配置 任务要求:在…...

MySQL 数据库故障排查指南

MySQL 数据库故障排查指南 本指南旨在帮助您识别和解决常见的 MySQL 数据库故障。我们将从问题识别开始,逐步深入到具体的故障类型和排查步骤。 1. 问题识别与信息收集 在开始排查之前,首先需要清晰地了解问题的现象和范围。 故障现象: 数…...

MacOS Python3安装

python一般在Mac上会自带,但是大多都是python2。 python2和python3并不存在上下版本兼容的情况,所以python2和python3可以同时安装在一台设备上,并且python3的一些语法和python2并不互通。 所以在Mac电脑上即使有自带python,想要使…...

锁相放大技术:从噪声中提取微弱信号的利器

锁相放大技术:从噪声中提取微弱信号的利器 一、什么是锁相放大? 锁相放大(Lock-in Amplification)是一种用于检测微弱信号的技术,它能够从强噪声背景中提取出我们感兴趣的特定信号。想象一下在嘈杂的派对上听清某个人…...

机器学习总结

1.BN【batch normalization】 https://zhuanlan.zhihu.com/p/93643523 减少 2.L1L2正则化 l1:稀疏 l2:权重减小 3.泛化误差 训练误差计算了训练集的误差,而泛化误差是计算全集的误差。 4.dropout 训练过程中神经元p的概率失活 一文彻底搞懂深度学习&#x…...

基于神经网络的无源雷达测向系统仿真实现

基于神经网络的无源雷达测向系统仿真实现 项目概述 本项目实现了基于卷积神经网络(CNN)的无源雷达方向到达角(DOA)估计系统。通过深度学习方法,系统能够从接收到的雷达信号中准确估计出信号源的方向,适用于单目标和多目标场景。相比传统的DOA估计算法&…...

《用MATLAB玩转游戏开发》Flappy Bird:小鸟飞行大战MATLAB趣味实现

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-Flappy Bird:小鸟飞行大战MATLAB趣味实现 文章目录 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互&#xf…...

【C/C++】跟我一起学_C++同步机制效率对比与优化策略

文章目录 C同步机制效率对比与优化策略1 效率对比2 核心同步机制详解与适用场景3 性能优化建议4 场景对比表5 总结 C同步机制效率对比与优化策略 多线程编程中,同步机制的选择直接影响程序性能与资源利用率。 主流同步方式: 互斥锁原子操作读写锁条件变量无锁数据…...

linux 三剑客命令学习

grep Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix…...

【js基础笔记] - 包含es6 类的使用

文章目录 js基础js 预解析js变量提升 DOM相关知识节点选择器获取属性节点创建节点插入节点替换节点克隆节点获取节点属性获取元素尺寸获取元素偏移量标准的dom事件流阻止事件传播阻止默认行为事件委托 正则表达式js复杂类型元字符 - 基本元字符元字符 - 边界符元字符 - 限定符元…...

《Linux命令行大全(第2版)》PDF下载

内容简介 本书对Linux命令行进行详细的介绍,全书内容包括4个部分,第一部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与必备工具&…...

补补表面粗糙度的相关知识(一)

表面粗糙度,或简称粗糙度,是指表面不光滑的特性。这个在机械加工行业内可以说是绝绝的必备知识之一,但往往也是最容易被忽略的,因为往往天天接触的反而不怎么关心,或者没有真正的去认真学习掌握。对于像我一样&#xf…...

Python实用工具:pdf转doc

该工具只能使用在英文目录下,且无法转换出图片,以及文本特殊格式。 下载依赖项 pip install PyPDF2 升级依赖项 pip install PyPDF2 --upgrade 查看库版本 python -c "import PyPDF2; print(PyPDF2.__version__)" 下载第二个依赖项 pip i…...

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分…...

Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题

各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…...

java加强 -Collection集合

集合是一种容器,类似于数组,但集合的大小可变,开发中也非常常用。Collection代表单列集合,每个元素(数据)只包含1个值。Collection集合分为两类,List集合与set集合。 特点 List系列集合&#…...

BGP实验练习1

需求: 要求五台路由器的环回地址均可以相互访问 需求分析: 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5,分属不同自治系统(AS),AR1 在 AS 100,AR2 - AR4 在 AS 200,AR5 在 AS …...

Nginx location静态文件映射配置

遇到问题? 以下这个Nginx的配置,愿意为访问https://abc.com会指向一个动态网站,访问https://abc.com/tongsongzj时会访问静态网站,但是配置之后(注意看后面那个location /tongsongzj/静态文件映射的配置)&…...

四、Hive DDL表定义、数据类型、SerDe 与分隔符核心

在理解了 Hive 数据库的基本操作后,本篇笔记将深入到数据存储的核心单元——表 (Table) 的定义和管理。掌握如何创建表、选择合适的数据类型、以及配置数据的读写方式 (特别是 SerDe 和分隔符),是高效使用 Hive 的关键。 一、创建表 (CREATE TABLE)&…...

每日脚本 5.11 - 进制转换和ascii字符

前置知识 python中各个进制的开头 二进制 : 0b 八进制 : 0o 十六进制 : 0x 进制转换函数 : bin() 转为2进制 oct() 转换为八进制的函数 hex() 转换为16进制的函数 ascii码和字符之间的转换 : chr(97) 码转为字符 …...

cookie和session的区别

一、基本概念 1. Cookie 定义​​:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据(通常小于4KB),浏览器会在后续请求中自动携带该数据。作用​​:用于跟踪用户状态(如登录状态)、记…...

Kotlin Multiplatform--03:项目实战

Kotlin Multiplatform--03:项目实战 引言配置iOS开发环境配置项目环境运行程序 引言 本章将会带领读者进行项目实战,了解如何从零开始编译一个能同时在Android和iOS运行的App。开发环境一般来说需要使用Macbook,笔者没试过Windows是否能开发。…...

图形学、人机交互、VR/AR领域文献速读【持续更新中...】

(1)笔者在时间有限的情况下,想要多积累一些自身课题之外的新文献、新知识,所以开了这一篇文章。 (2)想通过将文献喂给大模型,并向大模型提问的方式来快速理解文献的重要信息(如基础i…...

opencascade.js stp vite 调试笔记

Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...

openharmony系统移植之gpu mesa3d适配

openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…...

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...

Linux中常见开发工具简单介绍

目录 apt/yum 介绍 常用命令 install remove list vim 介绍 常用模式 命令模式 插入模式 批量操作 底行模式 模式替换图 vim的配置文件 gcc/g 介绍 处理过程 预处理 编译 汇编 链接 库 静态库 动态库(共享库) make/Makefile …...

深入理解深度Q网络DQN:基于python从零实现

DQN是什么玩意儿? 深度Q网络(DQN)是深度强化学习领域里一个超厉害的算法。它把Q学习和深度神经网络巧妙地结合在了一起,专门用来搞定那些状态空间维度特别高、特别复杂的难题。它展示了用函数近似来学习价值函数的超能力&#xf…...

使用lldb看看Rust的HashMap

目录 前言 正文 读取桶的状态 获取键值对 键值对的指针地址 此时,读取数据 读取索引4的键值对 多添加几个键值对 使用i32作为键,&str作为值 使用i32作为键,String作为值 前言 前面使用ldb看了看不同的类型,这篇再使用…...

Vue3简易版购物车的实现。

文章目录 一、话不多说&#xff0c;直接上代码&#xff1f; 一、话不多说&#xff0c;直接上代码&#xff1f; <template><div><input type"text" placeholder"请输入内容" v-model"keywords"><button click"addGood…...

比亚迪全栈自研生态的底层逻辑

比亚迪全栈自研生态的底层逻辑&#xff1a;汽车工程师必须理解的闭环技术革命 引言&#xff1a;当技术壁垒成为护城河 2023年比亚迪销量突破302万辆的震撼数据背后&#xff0c;隐藏着一个更值得工程师深思的事实&#xff1a;其全栈自研体系覆盖了新能源汽车83%的核心零部件。这…...

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八) 引言 在当今网络安全威胁日益严峻的背景下&#xff0c;为 Web 应用启用 HTTPS 已成为基本要求。Spring Boot 提供了简单高效的方式集成 HTTPS 支持&#xff0c;无论是开发环境测试还是生产环境部署&#xff0…...

5.1.1 WPF中Command使用介绍

WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…...

设计模式简述(十九)桥梁模式

桥梁模式 描述基本组件使用 描述 桥梁模式是一种相对简单的模式&#xff0c;通常以组合替代继承的方式实现。 从设计原则来讲&#xff0c;可以说是单一职责的一种体现。 将原本在一个类中的功能&#xff0c;按更细的粒度拆分到不同的类中&#xff0c;然后各自独立发展。 基本…...

常用设计模式

一、什么是设计模式 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验总结&#xff0c;旨在解决面向对象设计中反复出现的问题&#xff0c;提升代码的可重用性、可理解性和可靠性。以下从多个维度详细讲解&#xff…...

20242817-李臻-课下作业:Qt和Sqlite

实验内容 阅读附件内容&#xff0c;编译运行附件中第一章&#xff0c;第三章的例子。 实验过程 第一章 t1实践 #include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout>int main(int argc, char *argv[]) {QA…...

嵌入式机器学习平台Edge Impulse图像分类 – 快速入门

陈拓 2025/05/08-2025/05/11 1. 简介 官方网址 https://edgeimpulse.com/ 适用于任何边缘设备的人工智能&#xff1a; Gateways - 网关 Sensors & Cameras - 传感器和摄像头 Docker Containers - Docker容器 MCUs, NPUs, CPUs, GPUs 构建数据集、训练模型并优化库以…...

JavaWeb, Spring, Spring Boot

出现时间 JavaWeb - Spring - Spring Boot 一、JavaWeb 的发展历程 Servlet 和 JSP&#xff1a; Servlet&#xff1a;1997 年首次发布&#xff0c;用于处理 HTTP 请求和响应。 JSP&#xff1a;1999 年首次发布&#xff0c;用于动态生成 HTML 页面。 特点&#xff1a;提供了基…...

upload-labs靶场通关详解:第五关

一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".ph…...

【问题】Watt加速github访问速度:好用[特殊字符]

前言 GitHub 是全球知名的代码托管平台&#xff0c;主要用于软件开发&#xff0c;提供 Git 仓库托管、协作工具等功能&#xff0c;经常要用到&#xff0c;但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit&#xff08;原名 Steam&#xff09;是由江苏蒸汽凡星科技有限公…...

GitHub打开缓慢甚至失败的解决办法

在C:\Windows\System32\drivers\etc的hosts中增加如下内容&#xff1a; 20.205.243.166 github.com 199.59.149.236 github.global.ssl.fastly.net185.199.109.153 http://assets-cdn.github.com 185.199.108.153 http://assets-cdn.github.com 185.199.110.153 http://asset…...

【25软考网工】第六章(3)数字签名和数字证书

博客主页&#xff1a;christine-rr-CSDN博客 ​专栏主页&#xff1a;软考中级网络工程师笔记 ​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#xff01…...

Android Native 函数 Hook 技术介绍

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 Android Native 函数 Hook 技术是一种在应用运行时拦截或替换系统或自身函数行为的手段&#xff0c;常见实现包括 PLT Hook、Inline Hook。 PLT Hook 和…...

代码随想录算法训练营第60期第三十二天打卡

大家好&#xff0c;今天是我们贪心算法章节的第三阶段&#xff0c;前面我们讲过的几道题不知道大家理解的情况如何&#xff0c;还是那句话&#xff0c;贪心算法没有固定的套路与模板&#xff0c;一道题一个思路&#xff0c;我们要多思考这样慢慢地我就就可以水到渠成。今天我们…...

Problem C: 异常1

1.题目描述 检测年龄&#xff0c;其中若为负数或大于等于200岁皆为异常&#xff0c;请将下列代码补充完整。 // 你的代码将被嵌入这里 class Main{ public static void main(String[] args){ Person p1new Person("John",80); Person p2new Pers…...

Ollama部署使用以及模型微调和本地部署

ollama是一款开源的本地大语言模型管理工具&#xff0c;专注于简化大语言模型&#xff08;LLM&#xff09;的本地部署和使用。以下是关于 Ollama 应用的详细介绍&#xff1a; Ollama 的主要功能 本地化部署&#xff1a; Ollama 支持在本地运行模型&#xff0c;无需依赖外部云…...

汇编学习——iOS开发对arm64汇编的初步了解

汇编学习——iOS开发对arm64汇编的初步了解 文章目录 汇编学习——iOS开发对arm64汇编的初步了解前言栈 指令 寄存器寄存器指令运算指令寻址指令前变基 与 后变基 栈堆&#xff08;Heap&#xff09;内存机制三、栈&#xff08;Stack&#xff09;内存机制 3. 多级调用示例 例子A…...