随着网络的发展,数据越来越多,从而导致运算压力越来越大,为了解决这个问题,就需要合理的分级计算机资源,充分利用已有资源。缓存的工作实际上就是资源的合理分配。
一个网站或者应用的一般形式是:浏览器发应用请求,应用服务器做一堆计算和逻辑判断后再向数据存储层发出请求,数据存储层收到请求后再通过计算把数据返回给应用服务器,应应用服务器再次计算后把数据返回给浏览器。这是标准流程。
一、为什么使用缓存
随着web业务的复杂和并发的增加,应用服务器和数据库服务器所做的计算越来越多。怎样利用有限的资源提供尽可能大的吞吐量,这是我们需要解决的问题。
一个办法:减少计算量,缩短请求流程,这里缓存就可以大显身手了。缓存的基本原理就是打破标准流程,在标准流程中任何环节都可以被切断。请求可以从缓存中取得数据直接返回。这样能够节省时间、提高相应速度、节省硬件资源,可以让有限的硬件资源服务更多用户。
二、缓存层次
在web中,理论上每一层都可以被缓存,这些缓存进行一些层次划分,如下:
①底层有CPU缓存、磁盘文件系统缓存;
②应用层有Zend虚拟机的变量缓存、有memcached这样的key-value内存缓存,有APC、eAccelerator这类基于opcode字节码的缓存;
③数据库有Table Cache、Thread cache、query cache;
④Servlet容器有Apache的缓存;
⑤servlet再上去一点,有一个web cache层(如squid、Varnish等),然后应用程序代码级别的smarty实现的文件缓存。
此外,NoSQL缓存(NoSQL不是not sql,而是Not only SQL),包括Memcached、Cassandra、MongoDB、Redis、Tokyo Tyrant等产品。NoSQL同样是一种存储数据的数据库,主要基于内存和key-value模式。
缓存存放在内存和硬盘。文件缓存存放在硬盘上,而一些需要高速存取的变量则缓存在内存中。通常来说,缓存组件都是同时结合内存和硬盘的,当内存满后,把大部分数据持久化存储到硬盘,或者定期dump把内存的数据写入硬盘,防止数据丢失。
缓存有三要素:命中率、缓存更新策略、缓存最大数据量。
三、命中率
通过命中率衡量缓存机制的好坏和效率。命中率指请求缓存次数和缓存返回正确结果次数的比例。比例越高,证明缓存的使用率越高。需要注意的是,如果数据频繁更新,就需要考虑缓存的合理性。因为缓存更新会使命中率大大降低,当命中率比较低,缓存不仅不能提高效率,反而可能会造成负面影响。
四、缓存更新策略
缓存的容器都有大小限制,我们在对数据进行缓存的过程中,最后达到缓存可以容纳的极限;或者我们对原有的数据进行了操作,操作包括新增、修改、删除等;这个时候就必须考虑缓存内容更新问题。缓存更新策略归纳为以下几种:
①FIFO:first in first out。最先进入缓存的数据在缓存空间不够情况下会被首先清空出去;
②LFU:less Frequently Used。最少使用的元素会被清理丢。这要求缓存的元素有hit属性,在缓存空间不够的情况下,hit值最小的将会被清除缓存;
③FRU:least Recently Used。最近最少使用的元素被清理。缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出缓存的地方,现有的缓存元素中时间戳离当前时间最远的元素将被清空出缓存。
五、缓存的最大数据量
缓存最大数据量是在缓存中能处理元素的最大个数或所能使用的最大存储空间。通常各种缓存机制都会对缓存最大数据量进行限制,可以是固定大小的存储空间、集合个数,或者由操作系统所能分配和处理的存储空间决定。
例如mysql的Query cache缓存最大数据量由query_cache_size参数决定,可以修改;而基于内存的key-value实施方案Memcached,其缓存最大数据量可使用内存由操作系统决定,默认为64MB,每次最大可申请内存为2M.
超过缓存机制所允许的最大数据量系统会进行相应处理,一般有四种处理方式:
①停止缓存服务,所有缓存数据被清空;
②拒绝写入,不再对缓存数据进行更新;
③根据缓存更新策略清空旧数据;
④在方式3基础上,将淘汰的数据备份,腾出新的空间。
在实际的应用中,通常以方式3和4最为常见。
相关推荐
通过这样的实验,学生不仅能够从理论层面学习计算机系统,还能亲自动手操作,提升对计算机硬件和软件的感性认识,从而更好地理解和解决问题。这为后续深入学习编程、系统维护、故障排查等高级技能打下了坚实的基础。
- 高级应用篇:掌握关联查询,理解延迟加载机制,使用 MyBatis 的缓存功能,以及逆向工程生成代码。 - 扩展点:了解如何与其他框架集成,如 SpringBoot,以及使用第三方分页插件 PageHelper。 通过学习 MyBatis,...
计算机系统结构实验R,作为计算机科学与技术领域中不可或缺的核心课程之一,是所有计算机专业学生的必修课程。它不仅涉及计算机硬件系统的基本组成和工作原理,还包括软件与硬件之间的交互。该实验课件旨在为学生...
传统低速采样技术已无法满足这些领域的需求,因此,研究开发高速数据采集系统具有重要的理论意义和实际应用价值。 知识点二:时间交替采样技术 时间交替采样技术是解决高速数据采集系统采样率低问题的技术方案。它...
总的来说,理解存储系统不仅有助于我们深入认识计算机硬件的工作原理,也为系统性能优化和资源管理提供了理论基础。通过学习和实践,我们可以更好地理解和应用这些知识,提升计算机系统的整体性能。
这篇论文的发表,不仅提高了公众对BCP攻击的认识,也强调了浏览器缓存安全的重要性。它揭示了当前网络安全策略在应对BCP攻击时存在的不足,并为未来网络安全标准的制定提供了重要的参考依据。同时,它也为研究人员、...
这篇毕业论文不仅对Android平台的语音录入软件开发进行了全面研究,也为进一步提升移动设备的用户体验提供了理论依据和技术参考。通过深入阅读和理解,读者可以对Android语音录入技术有更深入的认识,为今后的开发...
在本篇文章中,我们将深入探讨计算机基础知识的主要内容,包括计算机的历史发展、应用领域、分类方法以及系统组成等方面。 计算机的历史可以追溯到20世纪初,最初是由一些数学家和工程师所设计的复杂机械装置。随着...
ASP奥运网站专题设计是一个以ASP(Active Server Pages)技术为基础,结合奥运主题的网站开发项目。这个项目不仅包含了源代码,还有一篇...同时,结合论文的阅读,能进一步提升理论素养,对网站开发有更全面的认识。
在当今信息化的时代,计算机已经成为我们生活和工作中不可或缺的工具。作为大学生,掌握计算机基础是学习各种专业知识的前提和基础。...通过本篇内容的介绍,希望读者能够对大学计算机基础有一个全面而系统的认识。
本文档源自一位热心人士(网名:intq)于2009年9月21日发布在网络上的《嵌入式系统设计师考试复习笔记之存储管理篇》,因其详实的内容受到了众多学习者的欢迎与反馈。在此基础上,作者决定进一步整理和完善笔记,...
Linux深入篇讲述了更多高级主题,比如构建高性能的Nginx WEB服务器、Rsync同步服务器、Tomcat/Resin JAVA服务器、Nginx与Tomcat动静分离、LNAMP架构配置、DNS域名解析服务器、MySQL主从高可用架构、LVS+Keepalived...
首先,从文档的标题《高级MySQL性能优化》来看,这篇文章应专注于为有一定基础的MySQL用户提供进阶性能调优的技巧和策略。这暗示内容将不仅限于基础的性能调优,而是深入探讨更复杂、高级的优化方法。 文档描述部分...
本篇计算机网络原理实验报告旨在通过两个关键实验,即LAN硬件平台搭建与常用网络命令的使用,帮助学生深入理解网络设备、网络介质以及网络工具的运用,提升其网络故障排查能力。 一、LAN硬件平台搭建实验 网络搭建...
本篇文章将从零开始,通过ThinkPHP示例中心的Form例子,以实践为主,理论为辅,逐步解析ThinkPHP的核心概念和基本操作。 ### 一、快速开始一个项目 1. **下载 ThinkPHP 1.5 正式版**:首先,你需要下载ThinkPHP的...
这篇毕业论文设计主要探讨了如何使用ASP.NET技术构建一个基于TCP协议的简单即时通信软件。在信息技术领域,即时通信(Instant Messaging, IM)系统是互联网服务的重要组成部分,它允许用户实时进行文字、语音甚至...