Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间...,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。...当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。...简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。...从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache
Spring cache简单使用 前言 spring有一套和各种缓存的集成方式。类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache....大多数情况下,只声明一个cache,但这个注解支持声明多个name,因此可以使用多个cahce。...默认的Cache Resolution Out of the box, 缓存代理使用简单的CacheResolver来获取cache, 这个是可以使用CacheManager来手动配置的。...如果不想使用默认的cache resolver,你需要实现接口:org.springframework.cache.interceptor.CacheResolver 自定义Cache Resolution...默认的cache resolution适合于使用一个CacheManager并且没有复杂的cache resolution.
file ps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids #find all the processs...' cache file #ps -e -o pid>/tmp/cache.pids if [ -f /tmp/cache.files ] then echo "the cache.files...|awk '{print $9}' >>/tmp/cache.files done</tmp/cache.pids if [ -f /tmp/cache.pcstat ] then echo..."the cache.pcstat is exist, removing now" rm -f /tmp/cache.pcstat fi for i in `cat /tmp/cache.files...cat /tmp/cache.pcstat` #rm -f /tmp/cache.
手工释放Linux Cache Memory 为了加速操作和减少磁盘I/O,内核通常会尽可能多地缓存内存,这部分内存就是Cache Memory(缓存内存)。...注意:一般情况下,是不推荐主动释放缓存内存的,除非你有非常明确的需求,比如测试程序缓存内存的使用情况,因为对同一应用程序来说,缓存内存是可用的。...如果要增加此操作释放的对象数量,可以在写入/proc/sys/vm/drop_cache之前运行sync。这将最大限度地减少系统上脏对象的数量,并创建更多待删除的候选对象。...当系统其它地方需要内存时,Linux内核会自动回收这些对象。 使用该文件可能引发性能问题。...因为它会删除缓存对象,可能需要消耗大量的I/O和CPU才能重新创建被删除的对象,尤其是这些对象被大量使用的情况下。因此,不建议在测试或调试环境之外使用。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。...buffers:系统分配但未被使用的buffers数量。 cached:系统分配但未被使用的cache数量。 -/+ buffers/cache:表示物理内存的缓存统计。...Page cache在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。...Buffer cache是由物理内存分配,Linux系统为提高内存使用率,会将空闲内存全分给buffer cache ,当其他程序需要更多内存时,系统会减少cache大小。...Cache(Page Cache)以页面形式缓存了文件系统的文件,给需要使用的程序读取,它是为了给读操作提供缓冲,避免频繁读硬盘,提高读取效率。
string CacheKey = "CT1"; //检索指定项, object objModel = Cache.Get(CacheKey); if (objModel == null) { objModel...= "插入值"; Cache.Insert(CacheKey, objModel, null, DateTime.Now.AddMinutes(120), System.Web.Caching.Cache.NoSlidingExpiration
最好具备一些Linux编程的基础,比如,如何打开一个文件;如何读写一个文件;如何关闭一个文件等等。 什么是Page Cache? Page Cache到底是属于内核还是属于用户?...怎么观察Page Cache 在Linux上直接查看Page Cache的方式: /proc/meminfo free /proc/vmstat 命令 内容其实是一致的。...比如应用本身消耗内存(RSS)不多的情况下,整个系统的内存使用率还是很高,那不妨去排查下是不是Shmem(共享内存)消耗了太多内存。...直接使用Direct I/O绕过Page Cache,不使用Cache了,省的去管它了。 为什么需要Page Cache?...所以,如果你不想为了很细致地管理内存而增加应用程序的复杂度,那你还是乖乖使用内核管理的Page Cache,它是ROI(投入产出比)相对较高的一个方案。
我们先来探究一下参数含义 total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buffers Buffer Cache和cached Page...Cache 磁盘缓存的大小 -buffers/cache (已用)的内存数:used - buffers - cached +buffers/cache(可用)的内存数:free + buffers...但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/+ buffers/cache: 58 191,这才是系统可用的内存大小...实际项目中告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。...我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少。如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准.
项目的扩容申请了一台机器,到手之后看一下机器的指标,看到内存使用情况是这样的。...先解释一下: total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buffers Buffer Cache和cached Page Cache...可用的memory=free memory+buffers+cached 这里可以看到我们使用了89G,其中cache占用了78G。...2、什么是cache 为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache...这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .
在Linux系统中,我们经常用free命令来查看系统内存的使用状态。...这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少)。一般情况下,对此命令输出的理解可以分这几个层次: 不了解。...buffer和cache是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义。在Linux的内存管理中,这里的buffer指Linux内存的:Buffer cache。...这里的cache指Linux内存中的:Page cache。翻译成中文可以叫做缓冲区缓存和页面缓存。...如何回收cache? Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放。
参考文档 https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ 有关Cache...Linux内核将写磁盘的操作分解成了,先写缓存,每隔一段时间再异步地将缓存写入磁盘。这提升了IO读写的速度,但存在一定风险。数据没有及时写入磁盘,所以存在数据丢失的风险。...同样,也存在cache被写爆的情况。还可能出现一次性往磁盘写入过多数据,以致使系统卡顿。之所以卡顿,是因为系统认为,缓存太大用异步的方式来不及把它们都写进磁盘,于是切换到同步的方式写入。...情景1:减少Cache 你可以针对要做的事情,来制定一个合适的值。...情景2:增加Cache 在一些场景中增加Cache是有好处的。例如,数据不重要丢了也没关系,而且有程序重复地读写一个文件。允许更多的cache,你可以更多地在内存上进行读写,提高速度。
在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。...本文主要参考若干kernel资料,对应的kernel源码版本主要包括:linux-0.11, linux-2.2.16, linux-2.4.0, linux-2.4.19, linux-2.6.18。...(通过while循环,一口气将所有目标block的buffer_head拿出来,再一把读取所有的数据) 而xxx_getblk最终,还是使用的 getblk 接口来定位到指定的 buffer_head...在Linux-2.2版本中, Page Cache 此时用来干什么的? (1)....Linux内核的文件Cache管理机制介绍 [9]. Linux内核文件Cache机制 [10].
如同范例代码展示的一样,Cache实例通过CacheBuilder生成器模式获取,但是自定义你的缓存才是最有趣的部分 注:如果你不需要Cache中的特性,使用ConcurrentHashMap有更好的内存效率...使用Cache.asMap()视图提供的任何方法也能修改缓存。但请注意,asMap视图的任何方法都不能保证缓存项被原子地加载到缓存中。...进一步说,asMap视图的原子运算在Guava Cache的原子加载范畴之外,所以相比于Cache.asMap().putIfAbsent(K, V),Cache.get(K, Callable) 应该总是优先使用...基于引用的回收(Reference-based Eviction) 通过使用弱引用的键、或弱引用的值、或软引用的值,Guava Cache可以把缓存设置为允许垃圾回收 通过使用弱引用的键、或弱引用的值、...或软引用的值,Guava Cache可以把缓存设置为允许垃圾回收: CacheBuilder.weakKeys():使用弱引用存储键。
; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean...; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager...; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory...; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable...InterruptedException e) { throw new IllegalStateException(e); } } } 运行结果: 可以看到其是使用注解上的
[注: 转载自今日头条号"闪念基因"] 在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘...本文主要参考若干kernel资料,对应的kernel源码版本主要包括:linux-0.11, linux-2.2.16, linux-2.4.0, linux-2.4.19, linux-2.6.18。...而xxx_getblk最终,还是使用的getblk 接口来定位到指定的buffer_head : ?...在Linux-2.2版本中,Page Cache此时用来干什么的? (1)....Linux内核的文件Cache管理机制介绍 [9]. Linux内核文件Cache机制 [10].
一:Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术...;并支持使用JCache(JSR-107)注解简化我们开发; Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache接口下Spring提供了各种xxxCache的实现;如RedisCache...使用Spring缓存抽象时我们需要关注以下两点; 确定方法需要被缓存以及他们的缓存策略 从缓存中读取之前缓存存储的数据 二:几个重要概念&缓存注解 名称 解释 Cache 缓存接口,定义缓存操作。...例如:@Cacheable(value=”mycache”) 或者@Cacheable(value={”cache1”,”cache2”} key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写...//或者指定获取解析器 String condition() default ""; //条件符合则清空 组合@Caching 有时候我们可能组合多个Cache注解使用,此时就需要@Caching组合多个注解标签了
SpringCache SpringCache包含两个顶级接口,Cache(缓存)和CacheManager(缓存管理器),顾名思义,用CacheManager去管理一堆Cache。...Springboot中会自动加载一个CacheManager(它有默认的实现类),所以只要写好一个自定义的Cache即可(如果想用系统定义好的或者第三方如RedisCache也行,记得向Spring注册这个...bean即可) Cache和CacheManager是怎样做关联的,其实是Spring扫包实现的 凡是继承了Cache接口的类,都会被自动注入进CacheManager中,最终存储于CacheManager...若需要指定一个自定义的key生成器,我们需要去实现org.springframework.cache.interceptor.KeyGenerator接口,并使用该参数来指定。...需要注意的是:该参数与key是互斥的cacheMnager用于指定使用哪个缓存管理器,非必需。只有当有多个时才需要使用cacheResolver用于指定使用那个缓存解析器,非必需。
(可以类比 ConcurrentHashMap) 提供常用的缓存过期策略,缓存刷新策略 提供缓存命中率的监控 基础使用 使用一个示例介绍 Guava Cache 的基础使用方法 -- 缓存大小写转换的返回值...")); assertEquals(1, cache.size()); } 使用 Guava Cache 的好处已经跃然于纸上了,它解耦了缓存存取与业务操作。...在 load 方法中设置了一个空值,后续通过手动 put + get 的方式使用缓存,这种习惯更像是在操作一个 HashMap,但并不推荐在 Cache 中使用。...总结 本文介绍了 Guava Cache 一些常用的 API 、用法示例,以及需要警惕的一些使用误区。...总之非常灵活,使用 Guava Cache 的 API 可以满足大多数业务场景的缓存需求。 为什么是 Guava Cache,它的性能怎么样?
领取专属 10元无门槛券
手把手带您无忧上云