随着网络的发展,数据越来越多,从而导致运算压力越来越大,为了解决这个问题,就需要合理的分级计算机资源,充分利用已有资源。缓存的工作实际上就是资源的合理分配。
一个网站或者应用的一般形式是:浏览器发应用请求,应用服务器做一堆计算和逻辑判断后再向数据存储层发出请求,数据存储层收到请求后再通过计算把数据返回给应用服务器,应应用服务器再次计算后把数据返回给浏览器。这是标准流程。
一、为什么使用缓存
随着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,...
传统低速采样技术已无法满足这些领域的需求,因此,研究开发高速数据采集系统具有重要的理论意义和实际应用价值。 知识点二:时间交替采样技术 时间交替采样技术是解决高速数据采集系统采样率低问题的技术方案。它...
总的来说,理解存储系统不仅有助于我们深入认识计算机硬件的工作原理,也为系统性能优化和资源管理提供了理论基础。通过学习和实践,我们可以更好地理解和应用这些知识,提升计算机系统的整体性能。
同时,探讨了不同通信模式下MPI并行程序的设计策略,包括标准、缓存、同步和就绪通信模式。 ### 三、实践操作篇 #### 10. MPICH的安装与MPI程序运行 最后,本书提供了在Linux环境下MPICH的安装指导,包括主要目录...
这篇毕业论文不仅对Android平台的语音录入软件开发进行了全面研究,也为进一步提升移动设备的用户体验提供了理论依据和技术参考。通过深入阅读和理解,读者可以对Android语音录入技术有更深入的认识,为今后的开发...
ASP奥运网站专题设计是一个以ASP(Active Server Pages)技术为基础,结合奥运主题的网站开发项目。这个项目不仅包含了源代码,还有一篇...同时,结合论文的阅读,能进一步提升理论素养,对网站开发有更全面的认识。
在本篇PPT学习教案中,我们探讨了手机软件故障的分析与检修,重点在于通过手机指令秘技、摩托罗拉手机维修卡的使用以及免拆机检修仪的应用来提升故障排查和修复能力。以下是对这些知识点的详细说明: 1. 手机指令...
本文档源自一位热心人士(网名:intq)于2009年9月21日发布在网络上的《嵌入式系统设计师考试复习笔记之存储管理篇》,因其详实的内容受到了众多学习者的欢迎与反馈。在此基础上,作者决定进一步整理和完善笔记,...
Linux深入篇讲述了更多高级主题,比如构建高性能的Nginx WEB服务器、Rsync同步服务器、Tomcat/Resin JAVA服务器、Nginx与Tomcat动静分离、LNAMP架构配置、DNS域名解析服务器、MySQL主从高可用架构、LVS+Keepalived...
首先,从文档的标题《高级MySQL性能优化》来看,这篇文章应专注于为有一定基础的MySQL用户提供进阶性能调优的技巧和策略。这暗示内容将不仅限于基础的性能调优,而是深入探讨更复杂、高级的优化方法。 文档描述部分...
本篇文章将从零开始,通过ThinkPHP示例中心的Form例子,以实践为主,理论为辅,逐步解析ThinkPHP的核心概念和基本操作。 ### 一、快速开始一个项目 1. **下载 ThinkPHP 1.5 正式版**:首先,你需要下载ThinkPHP的...
这篇毕业论文设计主要探讨了如何使用ASP.NET技术构建一个基于TCP协议的简单即时通信软件。在信息技术领域,即时通信(Instant Messaging, IM)系统是互联网服务的重要组成部分,它允许用户实时进行文字、语音甚至...
PACMAN攻击不仅在理论上有重大意义,而且已经在苹果M1 SoC处理器上成功实施了多种概念验证攻击,这标志着首次对支持ARM指针认证的桌面处理器发起此类攻击。 【PACMAN攻击】 PACMAN攻击的关键在于利用处理器的推测...
与之相对的,SQL Server可以利用自身的存储引擎优势,直接对数据库中的数据进行排序和计数,无需将数据完全载入内存,极大提高了计算效率。其内部存储结构,如B树、页面和范围索引,以及高级的缓存技术,使得其在...
2. **毕业设计**:这个项目适合学生作为毕业设计,因为它提供了实际的项目经验,有助于学生将理论知识与实践相结合,提高解决问题的能力。毕业设计通常需要涵盖需求分析、设计、实现和测试等阶段,因此这个模板可以...
本篇文章将详细解析基于.NET技术的企业门户网站源码——pnmA,帮助开发者理解和掌握C#编程在构建此类网站中的应用。 首先,我们要明白.NET框架是微软公司推出的一种全面的开发平台,它为开发者提供了构建各类应用...