java缓存范围的分析

来源:互联网 发布:云南省卫生网络直报 编辑:程序博客网 时间:2024/05/16 10:34
以下内容 ,纯属个人见解,如有疑问请联系我
因个人工作范围均是是java/web项目,所以一下是在web项目下比较的,此外需要阅读者拥有一定的java知识


缓存(Cache)在java项目的应用极为普遍,可以说一直都在,可能码代码的都没有在意,但它一直都在。
缓存的作用(百度):缓存就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
如果要说缓存的范围,倒不如说对象的作用域。先向码代码的诸位强调一点:对象不只是存在于代码间(虽然我们都知道,但我们习惯性的却是“代码”,这里我们需要跳出去)。我们天天说 session缓存,一级缓存(H),二级缓存(H),cacahe等等,但这些都是具体缓存或者定义缓存,狭隘且宽广。缓存的正确认识应该是:操作系统磁盘缓存->减少磁盘机械操作数据库缓存->减少文件系统I/O应用程序缓存->减少对数据库的查询Web服务器缓存->减少应用服务器请求客户端浏览器缓存->减少对网站的访问。由此我们的缓存对象其作用域就以及完全跳出了“程序代码”。操作系统主要是指的是应用服务器/web服务器/数据库服务器(包括相关集群设备);应用程序自然是我们的程序代码(包括其他部署程序,例如memcache、tomcat等);客户端则主要是指用户的浏览器部分。
那么,根据缓存的范围,我们可以针对性的考虑,缓存对象位于不同级别的位置,其作用是什么。
缓存对象在操作系统中,一般有以下种方式:1.系统子提供的,像文件系统提供的Disk Cache等等,我们一般是不干预的,或者我们没有对此作出具体的操作,我们通常的方式是给予充足的物理内存/存储,强大的CPU,较干净的操作系统等等。2.物理层面的,像我们做集群时,如hadoop,我们需要HDFS物理层面的缓存时,需要借助mmap,mlock等。具体请百度/Google》“HDFS缓存机制”。3.内存层面的,这个比较好理解,包括数据库的连接请求等等。那么,操作系统中的缓存对象其作用范围较大,理论上可以影响整个的服务进程。
应用程序的缓存,是我们最常用的,我们对缓存对象的初始化位置进行定义,使其可以有不同的作用范围,如写入硬盘/内存、全局、独立进程、部分程序、单独的类/页面等等,可以说是极为丰富全面。其具体内容,请百度/Google》“java缓存机制”。
客户端缓存主要是http缓存(请参考HTTP协议中的缓存控制头)、cookie、session缓存等,其作用范围,当然只有当前用户的浏览器。一般的像cookie,session等,我们是可以再应用程序中进行操作,或者进行页面的刷新。我们都知道客户浏览器的缓存是我们项目评价的重要影响因素,也是造成投诉的重要原因之一,这使我们又爱又恨。其具体请百度/Google》“浏览器缓存”。
综上,我们能看出 操作系统缓存>=应用程序缓存>=客户端缓,然后让我们回归代码,缓存对象的作用范围:内存/硬盘>=全局>=局部>=进程>=功能,程序、数据、浏览器都在其范围之内,我们需要关注的是:缓存对象的整个生命周期位置。
原创粉丝点击