那些“cache”和“buffer”(二)

page cache和buffer cache之间的关系以及验证 Linux系统存在两种缓存机制,分别是Page Cache和Buffer Cache, 其中Page Cache缓存文件的页以优化文件IO。Buffer Cache缓存块设备的块以优化块设备IO。 阅读详情

前面一篇文章谈了一些Linux系统层面的cache和buffer。这里主要谈谈应用层面的那些cache。相比系统层面的cache集中在IO上,应用层面的cache就显得五花八门了。就从WEB说起吧。

web缓存对于服务器和客户端都是不可或缺的。

对于web服务器来说,缓存是非常重要的东西,它可以大大的增加并发,缩短相应时间,减少服务器负荷。原理很简单。因为对于一个URL来说,很短时间内它的内容变化其实是不大的,如果每次请求都要服务器算一遍就显得太浪费了。所以web缓存就是放在web服务器前面的一个代理,它接收用户请求,并向后端请求,在返回响应的时候将这些响应缓存起来,遇到请求时不经过服务器计算直接返回响应,从大大提高响应速度,尤其是在请求量很大的时候。web缓存代表作是squid和varnish。

对于客户端的浏览器来说缓存同样不可或缺。甚至在HTTP协议中都为缓存提供了支持,HTTP返回码304 Not Modified就是告诉浏览器,你要的内容没变,用你缓存中的吧。在HTTP协议之外,浏览器自己也会做许多的缓存,对于图片啊,js什么的,短时间内的请求就自作主张直接不去远程取了,会大大减少请求量,从而节省大量的时间,用户需要速度。况且浏览器和服务器本是同根生嘛,不必相互煎熬。所以有时候你得强制刷新。

与web服务器紧密相关的就是数据库了。

在数据库系统中,缓存同样无处不在。因为同样的道理,对同一个sql查询来说,在某些条件下(比如它查的表自上次查询后都没更新过)它的结果就应该和上次查询一样的。于是mysql提供了query cache。也有些框架提供了缓存功能,比如hibernate。这都是读缓存,目的在于读很多,而写比较少的时候提高读的性能,如果写很多,而读比较少的话这类缓存就没什么用了。于是,在一些情况下我们希望可以为数据库引入写缓存。典型的是主键查询和更新。于是出现了kv数据库(比如memcached)。可以提供基于主键查询的读写缓存。这对于提高数据系统的整体性能是极其重要的。

其他五花八门的cache还有那些呢?

比如dns缓存,dns缓存同样存在于客户端和dns服务器中,与web缓存的原理是一样的。将dns的解析结果缓存起来。

比如arp缓存,将arp的结果缓存起来。

甚至,连编译系统也引入了缓存比如ccache,比如visual studio中的pch(预编译头)机制。

最后,我想说的是:cache is king! cache is everywhere!


原始出处


内存中的Buffer和Cache有什么区别? 我们知道可以使用free 和 top 等工具,来查看系统和进程的内存使用情况,我们也知道内存和 CPU 的关系非常紧密,而内存管理本身也是很复杂的机制。所以,接下来一点点抽丝剥茧 free # 注意不同版本的 free 输出可能会有所不同 $ free total used free shared buff/cache ... 阅读详情

相关推荐

一文带你了解 Linux 的 Cache 与 Buffer

一文带你了解 Linux 的 Cache 与 Buffer。

RAB 2392

超级加速!ccache让编译速度飞起来

对于重复编译,无论是单命令编译,还是实际工程编译,使用ccache构建速度都极大的提升了编译效率。ccache通过缓存已经编译过的对象文件,可以大大减少重复的编译工作。帮助减轻大型项目的编译负担,节约开发过程中的计算资源和成本。

Lion_Long的博客 7514

buffer 和 cache 的含义

buffer和cache

afterlife_union的博客 1043

加速C++程序编译的方法

1、并行编译 可以开启多核编译来提高编译速度,充分利用机器的性能来优化编译。 打开 Qt Creator,选择【Kits】->【构建套件(kit)】,在【Environment】处输入“MAKEFLAGS=-j16”。 这是最便利的方式,一劳永逸,只需设置一次,后期所有使用 make 的构建系统都会自动启用。 2、利用第三方工具 ...

beibeix2015的博客 1658

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点

本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。

weixin_28077113的博客 493

如何加快C++代码的编译速度

C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -

洛阳纸迷 868

超详细MySQL 8.0安装与配置

MySQL的安装与配置 还不会安装MySQL的同学们,还不会配置MySQL的同学们,赶紧按照下面步骤操作起来,超详细安装步骤如下: 进入MySQL官网 1、点击download 2、点击MySQL Community Server 3、选好选项点击go to download page 4、点击download 5、点击no thanks,just start my download 6、选Server only,点击Next 7、点击Execute 8、点击

Turniper的博客 8753

内存中的buffer和cache

目录 一、free命令 二、buffer和cache的数据来源及含义 1、数据来源 2、Buffers、Cached 和 SReclaimable 3、其他注意点 三、如何利用Buffer 和 Cache优化程序的运行效率? 1、缓存命中率 2、指定文件的缓存大小 四、总结 一、free命令 提到查看linux主机内存,我们总会想到free命令也一般用该命令,如下面的输出: [root@localhost ~]# free total .

C-Jonn 4649

openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

【YOLOv11】087、YOLOv11多任务学习:检测、分割、分类联合学习

摘要: 工业质检场景中,多任务模型(检测、分类、分割)的需求日益增长。针对边缘设备部署的挑战,本文提出基于YOLOv11的多任务学习方案。通过共享主干网络和设计分支头(检测、分割、分类),实现高效推理;采用动态权重平衡策略解决多任务损失不平衡问题;并优化数据流处理(支持部分标注)和推理剪裁(按需启用分支)。实验表明,该方法在Jetson Orin上帧率提升3倍,内存占用减少40%,为工业质检提供了轻量高效的解决方案。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 445

Linux 内存中Page cache和buffer cache 的区别

Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手

haiross的专栏 7492

[VT虚拟化驱动] 定义类及初始化内存区域

文章目录前言框架整体流程图类的定义初始化内存区域本章代码 前言 为什么不用C而用C++呢? 在单核的情况下,用C还比较方便些,但在多核的情况下,每个核心都需要分配有对应的一个VMX区域,VMCS区域,MsrBitmap区域和栈空间,以及对应的初始化函数,如果使用安装DPC回调的方式在多核情况下进行初始化,只使用同一个初始化函数,当函数被多个CPU核心同时执行,会出现很多意想不到的的错误,我用自旋锁试了一下是依照各种错误,所以果断用C++了,把这些每个核心都需要一份的封装到一个类里 框架整体流程图 类的定义

吾无法无天的博客 1835

服务器buffer/cache 的产生原因和释放buffer/cache

Pagecache主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write操作的时候。如果你仔细想想的话,作为可以映射文件到内存的系统调用mmap是不是很自然的也应该用到pagecache?在当前的系统实现里,pagecache也被作为其它文件类型的缓存设备来用,所以事实上pagecache也负责了大部分的块设备文件的缓存工作。...

杜海的博客 5164

【100%通过率】华为OD机试真题 JS 实现【水库蓄水问题】【2023 Q1 | 100分】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 8170

LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)

LiveBOS UploadFile.do 接口存在任意文件上传漏洞,未经身份验证的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 2419

【操作系统】操作系统的Buffer和Cache

本文带你了解操作系统中cache和buffer的区别,以及各自的使用场景。

互联网小阿祥 2918

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

什么是Cache?什么是Buffer?二者的区别是什么?

Buffer和Cache的区别 buffer与cache操作的对象就不一样。1、buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。 2、cache(缓存) 从CPU角度考虑,是为了提高cpu和内存之间的数据交换速度而设计的,例如平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读...

LiuNiuLangZhiLvNv的博客 6091

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

linux下的cache和buffer

一、缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。 缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。 CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与

jinking01的专栏 2170

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

linux buff cache区别,buffer和cache的区别

一,计算机硬件组成计算机硬件组成:CPU,存储器,输入输出设备(I/O),其他(主板,电源等)CPU:运算器,控制器存储器:内部存储器(ROM/RAM),外部存储器(磁盘等)I/O:输入设备(鼠标/键盘),输出设备(显示器/打印机)从性能分析:-CPU缓存>内存>磁盘>数据库从性能来看内存是介于CPU和磁盘,在实际中内存是CPU和磁盘的桥梁。buffer和cache是内存的不同的...

weixin_42298645的博客 2354

buffer和cache的区别

cache实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。Linux统计/监控工具sar详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看。

大叶子不小的博客 1513

Linux中的buffer和cache到底是什么?今天终于明白了

在IT行业,有不少术语英文看起来区别不小,但是翻译成中文,就很容易混淆。今天我们就来说其中的一对术语——buffer和cache。 Buffer和cache英文看起来区别很大,但在不少公司里甚至部分翻译过来的技术图书里,经常被统称为“缓存”。或者叫“缓”什么什么… 上面的说法、翻译,是错误的! 01 带你认识正确的翻译 正确的翻译:buffer,缓冲区;cache,缓存。 先看英语解释,大体上看起来这样的:Abufferis something that has yet to b...

Testfan_zhou的博客 1765

cache 和 buffer的区别

cache 和 buffer的区别 A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use ; 对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存 Buffer:缓冲区,用于存储

Yonx 1330

Linux内存中的 buffer 和 cache

Linux内存中的 buffer 和 cache 到底是个什么东东?   Linux 中的 free 命令,会输出:   total  总量   used  已使用   free  空闲   shared  共享内存   buffers     cached   前面四项都比较好理解,一看我也就知道啥意思了。但是buffer 和 cached 我就一直不很理解,终于看到某篇文章写...

jacke121的专栏 3053

Linux中Buffer和Cache的区别

free命令中会有一项buff/cache通过man free可以看到这里的关于buff/cache的介绍buff/cache包含两部分buffers:内核缓存区用到的内存,对应中Buffers的值cache:内核页缓存和Slab用到的内存,对应中Cached与之和。执行man proc可以看到关于的说明。Buffers是对原始磁盘块的临时缓存,通常不会特别大(20M左右)。Cached是从磁盘读取文件的页缓存是Slab的一部分。Slab包括两部分,其中的可回收部分,用记录,而不可回收的部分,用。

wbo 935

Linux之free命令介绍 及buffer和cache的区别

linux内存free命令介绍,Linux下 buffer和cache的区别

专注自动化、性能测试、测试架构学习交流 5011
上一篇: 那些“cache”和“buffer”(一)
下一篇: ANDROID DEVELOPMENT TOOLS R17 BREAK YOUR LIBGDX PROJECT?
mingming_killer
博客等级 码龄19年 18粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值