关于缓存问题的思考与总结

news2024/11/25 7:03:57

提到缓存,最容易想到的便是Redis了。Redis凭借其出色的性能表现,十分适合做缓存。那么为什么需要缓存这个东西以及缓存用在哪些地方呢?

一、基本原理

存储层次模型

注:也是背景来源

想要设计好的架构或者应用、程序,一个稳定的思想、原理至关重要。计算机系统结构中的八大伟大思想,指引我们设计的计算机体系结构十分高效。其中的 存储层次结构 是至关重要的 一点,现代计算机的存储层次大致如下图所示。

在这里插入图片描述
对于用户角度,我们最关心的便是 响应速度,它也是性能指标的核心指标。任何程序应用都是以用户为中心,因此设计 应用 我们在满足功能的情况下则会去 追求 尽可能的 !。而对于 程序 的 运行 基本上会经历以下步骤:

  • 编写文本文件,即源程序(静态文件),存储于 磁盘
  • 创建进程:为程序分配内存资源等,将程序装载至内存
  • 启动程序:进程调度至CPU,将PCB的虚拟地址空间的信息加入至寄存器(上下文切换时,会将基地址写入唯一的 基地址寄存器)
  • CPU读入内存中程序段,然后数据段等程序信息。(省略MMU进行虚拟地址转换等步骤)
  • CPU进行程序的处理,读取CPU Cache寄存器(指令寄存器)
  • 进行计算、存储等操作

在这过程中,越离CPU的近的地方速度则越快。所以说我们为了更快则需要将程序尽可能离CPU近,但是 资源是稀缺的,越快则意味着造价越高,我们需要在 成本 和 性能之间做出平衡。因此,我们只有想办法,让我们离CPU近的地方尽可能地存放我们需要使用的数据。这是则出现了另外一个重要的思想:程序局部性原理。

局部性原理

大约是1961年时,该思想被提出来。程序局部性原理,是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域,具体来说,局部性通常有两种形式:时间局部性和空间局部性。

  • 时间局部性:被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。

  • 空间局部性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。

这种概率统计学理论,的确也十分符合人的自然规律,例如80%的财富掌握在20%手中,考试也总是喜欢考察20%的重点内容。而该种思想和 预测 (指令分支预测)有点相似。

因此,缓存则基于以上的背景诞生了。用容量较小但性能较高的存储器去存储大量数据中重要(频繁使用)的数据。

二、场景应用

计算机系统

  • 内存和CPU寄存器间:CPU Cache;同时一次性读取Cache Line的数据,来预测下次访问。
  • MMU中的 页表(存于内存)和寄存器:TLB,快表,加快地址映射速度。

网络应用

  • DNS解析过程中的(浏览器、OS的缓存)
  • Cookie

系统级应用

  • MySQL BufferPool对磁盘数据

Java开发应用

  • Mybatis的缓存机制
  • Redis做热点数据缓存

三、思考总结

作用

缓存也是加一个抽象层/中间层。它的作用是缓解压力,提升速度(和消息队列中间件的作用类似);而像OS这样的中间层(加在硬件和用户间的)是易用性,提升用户的可操作性)

问题

加了抽象层,则会带来复杂性。例如redis和database之间的双写问题处理。CPU Cache中多核情况下考虑一致性问题。【归纳来说则是一致性问题-上下级的一致性】,追求的目标则是尽可能 缓存 高命中率 的数据,及时淘汰不需要的数据。【以及考虑缓存预读问题和污染问题等】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven安装配置的保姆级教程

前言 下面是关于maven的一些介绍: maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等maven的好处在于可以将项目过程规范化、自动化、高效化以及…

C++程序设计——继承与派生

更多内容可以查看系列文章C语言入门全教程(持续更新) 目录 前言 一、继承的概念 1.楔子 2.派生类的定义 3.继承和派生的意义 4.案例1:派生类的定义 二、继承方式 1.公有继承(public) 2.保护继承(…

网络拓扑结构可视化呈现方案

随着数字化进程的加速,企业网络中设备的数量日益快速增长,网络规模逐渐庞大,组网结构、IT 环境变的无比复杂,需要花费大量的时间和资源去监测网络运行状态,诊断解决故障问题。面对不断趋向复杂化和多样化的网络规模和结…

Mac M1使用Docker报错 Failed to get D-Bus connection: No such file or directory的解决方案

0x00 前言 最近在Mac上安装docker的CentOS7镜像,打算开个sshd服务,使用命令: $ systemctl start sshd结果在启动sshd服务的时候提示报错: Failed to get D-Bus connection: No such file or directory0x01 运行环境 版本MacOS…

《Qt开发》基于QwtPolar的极坐标图绘制

QwtPolar绘制极坐标图 该示例包含以下功能: 使用QwtPolarPlot绘制极坐标曲线实现曲线的缩放和平移调整极坐标为顺时针顺序1. 创建项目 创建项目名称为QwtPolarDemo1,并添加一个Qt5Class类,命名为myPlot。 2. 配置项目 在项目——属性——C/C——常规…

【C++】——初识C++(一)

文章目录1. 进入C1.1 main()函数1.2 C注释1.3 C预处理器和iostream文件1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.6.1 控制符endl1.6.2 换行符1.6.3 使用cout进行拼接1.7 cin1.8 变量1.8.1 变量名1.9 常量1.10 关键字1. 进入C 第一个程序 // my…

构建数据大屏,塑造IT运维可视化核心竞争力

随着大数据、云计算等新兴技术的发展与运用,在金融、交通、教育、政府等行业的信息化在飞速发展。与此同时,各行业的IT建设与维护管理成本也在与日俱增,大量的运维工作下产生庞大的运维数据,如何进行运维数据可视化建设也逐渐成为…

qt之smtp-demo封装与测试

简介 SMTP是一种提供可靠且有效的电子邮件传输的协议,它建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。 SMTP的工作过程是建立连接、邮件传送、连接释放。 SMTP的默认端口是25。…

游戏思考26:使用EASTL配合共享内存做自定义STL(未完待续12/27)

文章目录一、前置学习1&#xff09;萃取&#xff08;1&#xff09;迭代器所指对象的类型-value_type<1>第一个限制-返回参数需要指明迭代器的value_type<2>第二个限制坑点-不是所有迭代器都是class type&#xff0c;原生指针就不是<3>第三个限制坑点-如果针对…

2022-12版本的Rstudio它来了,它喊我升级了

1. Rstudio喊我升级 最近每一次打开Rstudio&#xff0c;总是推送给我最新版的Rstudio&#xff1a; 它之前不是这样的&#xff0c;那时候它所在的公司还叫Rstudio&#xff0c;现在改名叫Posit了&#xff0c;就开始推送了&#xff0c;也许它认为是重大的更新&#xff0c;也许他能…

【vue面试题-vuex】

vuex1.vuex是什么&#xff1f;怎么使用&#xff1f;哪种功能场景使用它&#xff1f;2.vuex有哪几种属性&#xff1f;3.Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中&#xff1f;4.Vuex解决了什么问题&#xff1f;5.Vuex中状态储存在哪里&#xff0c;怎么改…

【LeetCode】1739. 放置盒子

1739. 放置盒子 题目描述 有一个立方体房间&#xff0c;其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子&#xff0c;每个盒子都是一个单位边长的立方体。放置规则如下&#xff1a; 你可以把盒子放在地板上的任何地方。 如果盒子 x 需要放置在盒子 y 的顶部&…

【webpack】cjs运行时分析

准备工作&#xff08;接上篇文章的示例也可以&#xff09;&#xff1a; 1. 在index.js文件中引入任一js文件 import sum from ./sum;const result sum(1,2); console.log(result);2. sum文件 const sum (a, b) > {return ab; }export default sum3. build.js文件 const…

离子交换法深度剖析

离子交换法 是一种借助于离子交换剂上的离子和污水中的离子进行交换反应而除去污水中有害离子的方法。 离子交换法的特点 离子交换过程是一种特殊的吸附过程&#xff0c;在许多方面与吸附过程类似。 与吸附法比较&#xff0c;其特点是:它主要吸附污水中的离子化物质&#xff…

怎样做一个不会被淘汰的车载诊断工程师

步入中年&#xff0c;不可避免会接触到所谓的中年危机&#xff0c;时刻在提醒自己提高自己的护城河&#xff0c;增强核心竞争力。但是这种事情也不是靠空想&#xff0c;还是要功夫下在平时。 自己是在2016年开始接触车载诊断方面&#xff0c;从事过诊断范畴的开发、测试、偏系…

程序员的圣诞节是怎么样的?

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 一、前言 圣诞节&#xff0c;先在这里祝大家圣诞节快乐~~&#xff0c;用英语来表达就是 Merry Christmas ~~&#xff0c; 为了贴合这个氛围&#xff0c;今天分享种用 Python 绘制圣诞树的方法。 最近用代码绘画圣诞…

非常易用的网络路径中的网络延迟测试和监控以及自动发送报告工具

非常易用的网络路径中的网络延迟测试和监控以及自动发送报告工具。 作为网络管理员或网络工程师&#xff0c;时刻关注网络的交付速度至关重要。不仅需要确保自己有良好的响应时间&#xff0c;还需要确保网络的速度足以满足用户通信所需的每一条路径。而手动测试每个路径将占用…

SpringBoot+Vue项目医院体检中心管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

电脑文件数据恢复方法是什么?未备份电脑文件数据恢复的七种方法

在日常生活中&#xff0c;我们总会遇到这样或那样的事情&#xff0c;比如在使用电脑过程中出现文件数据丢失情况&#xff0c;那么在未备份文件下电脑文件数据丢失怎么恢复&#xff1f;电脑文件数据恢复方法有哪些&#xff1f;这里将根据不同情况分享不同的电脑文件数据恢复方法…

L05_课后练习_波士顿房价预测

波士顿房价预测 1.导入所需要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import random from sklearn.model_selection import train_test_split2.读入数据 feature pd.read_csv("../data/boston.csv") feature…