linux概念之cache

cache

客户端CACHE
客户端CACHE,包括浏览器本身的缓存、FLASH存储等,用于存储一些临时的文件或者变化不大或无变化的数据:
1.如浏览器自动将用户浏览的网页存储在用户的硬盘上,下次再浏览相同的网站的时候,系统会自动从硬盘中调出该网页,既节省了时间也减少了网络的交换;
2.还有就是相同的数据需要以不同的形式在客户端展现,
合理的运用客户端CACHE功能,减少网络的访问次数,这无疑会提升客户体验,给被访问的网站加分,并且不会有硬件的费用投入,理论上讲是一种“零”投入的策略。

代理服务器
1.用做翻墙
2.还有就是需要访问的站点访问速度比较慢,可以通过代理服务器提高访问的速度
商用的代理服务器,通常都是有CACHE功能的,访问都比较稳定,且个人信息安全性也相对要高得多;
但是普通的代理服务器就不一定有CACHE功能了,访问的稳定性也不一定能够保证,最可怕的个人信息的安全性完全没有保障,因而在考虑使用代理服务器的时候要慎重,否则不要因小失大,那可就亏大了。

CDN,镜像站点
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",
使用户可以就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。
(也就是一个服务器的内容,平均分部到多个服务器上,服务器智能识别,让用户获取离用户最近的服务器,提高速度。)
现阶段,国内流量比较大的网站,如阿里巴巴、淘宝、腾讯、新浪、网易等都有使用CDN技术,这给用户的感觉就是在任何地方访问都比较快。
镜像站点、CDN这二者之间有一点比较类似,都是通过增加服务结点来降低访问的拥挤度,并提高用户访问的速度。他们的差别是镜像服务本身是一个独立的服务器,
内容完全来自于主服务器,通过定期到主服务器去更新内容而保持内容与主服务器基本一致,如华军软件园的实现就是很多的镜像站点,直接访问该镜像的请求都全部去了该镜像服务器,
这就会出现不同的镜像站点会有不同的访问压力,也就是没有导流、负载均衡的作用,但如果镜像站点出现了问题,是没有被其它服务器代理的,
就相当于你访问的其它网站出现问题一样:挂了;CDN其实也是代理,只是他比镜像服务更智能的代理,如果当前服务器访问量过大时,可以将流量导到其它的服务器,提升响应的时间,
它的优势在于几乎涵盖国内所有线路,而在可靠性上,CDN 在结构上实现了多点的冗余,即使某一个节点由于意外发生故障,对网站的访问能够被自动导向其他的健康节点进行响应。
CDN能轻松实现网站的全国铺设,不必考虑服务器的投入与托管、不必考虑新增带宽的成本、不必考虑多台服务器的镜像同步、不必考虑更多的管理维护技术人员。

squid

中心数据CACHE服务器 (内存cache)
以上谈到的都是应用以外的CACHE,以增加服务器节点提升用户访问速度,有没有办法使系统在获取数据时不是每次都和数据库打交道,减少I/O的开销,从而提访问速度呢?答案是肯定的,
阿里使用的是内存CACHE(memcached),将经常访问、不易变化且CACHE命中率比较大的数据,放到CACHE服务器中,如阿里助手的菜单,这些数据都是不怎么变化,放到CACHE中应用在获取菜单数据时,
速度就会提高,从而提高应用响应时间,也可以说是提高了用户的访问速度。
在选择,需要注意几点:
1、CACHE的可靠性,在大量访问及使用的情况,能够保证数据的可靠性;水平伸缩性比较好,这方便于快速提高CACHE的系统容量;CACHE要能够快速数据恢复,
当其中某台CACHE出现问题的时候,其它的CACHE能够在短时间之内代替它的工作;
2、CACHE的有效性,要支持定期的数据失效策略,为其它需要使用CACHE的数据提供存储空间。
使用CACHE的时候,也需要注意CACHE的命中率要高,意思就是CACHE中要存放经常访问、不易变化的数据,这才能够体现CACHE的价值,如果将阿里每个用户的个人信息都放到CACHE中,这是没有意义的。

JVM CACHE (另一种内存cache)
这里说的JVM CACHE,也是将数据放到内存中,算是另外一种内存CACHE,如我们在代码中写的静态对象,只是这种CACHE是没有过期策略的,除了绝对不变的数据以外,
如配置文件及参数可以保存JVM中,不推荐使用JVM CACHE;阿里助手的菜单使用的是MEMCACHE,没有使用JVM CACHE,因为菜单有些时候也需要做变更的,这个时候要使变更立马的反映出来,
可以通过手动清理MEMCACHE的方式,而JVM CACHE是不方便清理的,并且如果又是在集群环境中,完全清理的成本将是非常大的,而使用中心CACHE服务器,只需清理一次就完全清除了;
如果菜单出不来或者数据不正确,那至少是A类故障。
另外还有一些数据库中间件,如IBATIS、HIBERNATE等,也都支持数据缓存,支持数据自动过期策略,可以设定CACHE的数量,如下是IBATIS的CACHE配置实现:

数据库CACHE
数据库本身也是有CACHE的,这里我们就不继续究下去了,有兴趣的可以去研究研究。

本篇介绍CACHE,是从离用户最近到用户最远的顺序进行介绍的,让你可以一层层的去了解合适的优化策略,比较泛泛,没有什么深入的东西,都只是从表面上谈到了一些东西,具体的场景和使用,还需要根据具体情况而定。

http://www.blogjava.net/DLevin/archive/2013/10/15/404770.html

硬件的缓存系统,如cpu的一级,二级,硬盘的缓存等
在软件的缓存系统中,一般是为了解决内存的访问速率和磁盘、网络、数据库(属于磁盘或网络访问,单独列出来因为它的应用比较广泛)等访问速率不匹配的问题(对于内存缓存系统来说)。
但是由于内存大小和成本的限制,我们又不能把所有的数据先加载进内存来。因而如CPU中的缓存,我们只能先将一部分数据保存在缓存中。此时,对于缓存,我们一般要解决如下需求:

记得我最早接触Cache是在大学学计算机组成原理的时候,由于CPU的速度要远大于内存的读取速度,为了提高CPU的效率,CPU会在内部提供缓存区,该缓存区的读取速度和CPU的处理速度类似,CPU可以直接从缓存区中读取数据,从而解决CPU的处理速度和内存读取速度不匹配的问题。缓存之所以能解决这个问题是基于程序的局部性原理,即”程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。”在实际工作中,CPU先向缓存区读取数据,如果缓存区已存在,则读取缓存中的数据(命中),否则(失效),将内存中相应数据块载入缓存中,以提高接下来的访问速度。由于成本和CPU大小的限制,CPU只能提供有限的缓存区,因而缓存区的大小是衡量CPU性能的重要指标之一。
使用缓存,在CPU向内存更新数据时需要处理一个问题(写回策略问题),即CPU在更新数据时只更新缓存的数据(write back,写回,当缓存需要被替换时才将缓存中更新的值写回内存),还是CPU在更新数据时同时更新缓存中和内存中的数据(write through,写通)。在写回策略中,为了减少内存写操作,缓存块通常还设有一个脏位(dirty bit),用以标识该块在被载入之后是否发生过更新。如果一个缓存块在被置换回内存之前从未被写入过,则可以免去回写操作;写回的优点是节省了大量的写操作。这主要是因为,对一个数据块内不同单元的更新仅需一次写操作即可完成。这种内存带宽上的节省进一步降低了能耗,因此颇适用于嵌入式系统。写通策略由于要经常和内存交互(有些CPU设计会在中间提供写缓冲器以缓解性能),因而性能较差,但是它实现简单,而且能简单的维持数据一致性。

Java中的Cache库

在Java社区中已经提供了很多Cache库实现,具体可以参考http://www.open-open.com/13.htm,这里只关注自己用到的几个Cache库而且这几个库都比较具有代表性:
Guava中提供的Cache是基于单JVM的简单实现;
EHCache出自Hibernate,也是基于单JVM的实现,是对单JVM Cache比较完善的实现;
而Gemfire则提供了对分布式Cache的完善实现。
这一系列的文章主要关注在这几个Cache系统的实现上,因而不探讨关于Cache的好处、何时用Cache等问题,由于他们都是基于内存的Cache,
因而也仅局限于这种类型的Cache(说实话,我不知道有没有其他的Cache系统,比如基于文件?囧)。

http://www.iteye.com/topic/21810

linux概念之cache

时间: 2025-01-06 06:24:28

linux概念之cache的相关文章

Linux概念与体系阅读笔记

[Linux概念与体系教程http://www.cnblogs.com/vamei/archive/2012/10/10/2718229.html] 1.Linux开机启动(bootstrap) 启动顺序:BIOS -> MBR -> boot loader -> kernel -> init process -> login BIOS:Basic Input/Output System MBR :Master Boot Record 2.Linux文件管理 (1)文件附件信

【转】Linux 概念架构的理解

转:http://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=400583492&idx=1&sn=3b18c463dcc45103b76a3419ceabe84c&scene=2&srcid=1213Z5CBO8W4jCmTSFI74uIb&from=timeline&isappinstalled=0#wechat_redirect Linux 概念架构的理解 2015-12-12 译者: 杜琪 Qu

linux概念之时间

linux调整系统时区:    找到相应的时区文件/usr/share/zoneinfo/Asia/Shanghai    用这个文件替换当前的/etc/localtime文件    这时date一下应该是CST时间了    如果还不行,那就要修改一下TZ环境变量的值了.    许多程序和命令都会用到这个变量的值,TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令或者终端输入TZ='CST-8'; export TZ就可以了.    不过这个改变只在这次登陆生效,如果想要永久生

linux概念之集群

所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机.通俗一点来说,就是让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份. 网络的负载均衡是一种动态均衡技术,常见的实现方式是通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去.这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵

linux 内存中cache和buffer解析

cache是从磁盘读数据到内存中的缓存,减少读取磁盘的次数, 大家知道的硬盘读取速度过慢. buffer是准备从内存写到硬盘的缓存,缓存中的数据会进行合并 同时,避免频繁操作硬盘. linux 内存中cache和buffer解析

linux buffer 与 cache 的区别

linux buffer 与 cache 的区别.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.两者都是RAM中的数据.简单来说,buffer(缓冲)是即将要被写入磁盘的,而cache(缓存)是被从磁盘中读出来的 缓冲(buffers)

linux概念之杂项

登录记录 /var/run/utmp,/var/log/wtmpwtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令).用户需要使用who.w.users.last和ac来使用这两个文件包含的信息.last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户lastlog命令查看各个用户最后一次登录时间users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息who命

Linux中buffer/cache,swap,虚拟内存和page ++

1.Buffer 和 cache Free 命令相对于top 提供了更简洁的查看系统内存使用情况: [[email protected] ~]$ free -m               --以MB为单位                     total         used       free     shared    buffers     cachedMem:            32109      30133      1975          0        472

linux page buffer cache深入理解

Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1          2          3          4          5          61              total       used       free     shared    buffers