网站缓存

news/2024/5/20 18:03:08/文章来源:https://blog.csdn.net/weixin_30335575/article/details/95506630

网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验。

  网站缓存按照存放的地点不同,可以分为客户端缓存、服务端缓存。



 

 
客户端缓存


  客户端缓存又可分为:浏览器缓存、网关或代理服务器缓存

 

  网关或代理服务器缓存是将网页缓存中网关服务器上,多用户访问同一个页面时,将直接从网关服务器把页面传送给用户。

  浏览器缓存是最靠近用户的缓存,如果启用缓存,用户在访问同一个页面时,将不再从服务器下载页面,而是从本机的缓存目录中读取页面,然后再浏览器中展现这个页面。

  浏览器缓存的控制,可以设置meta标签,可以设置数字,也可以设置时间,如下:

 

<Meta http-equiv="Expires" Content="3600">

<Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT">

 

  HTTP头信息如下:

 

HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT

 

  不过现在的网站为了保证用户访问到最新的内容,一般很少采用浏览器缓存,取而代之的是更加灵活的服务器缓存。


服务端缓存

 


服务端缓存分为:页面缓存、数据缓存、数据库缓存


1、页面缓存
  页面缓存是将动态页面直接生成静态的页面放在服务器端,用户调取相同页面时,静态页面将直接下载到客户端,不再需要通过程序的运行和数据库的访问,大大节约了服务器的负载。
  早期的网站很多使用发布系统来完成这个功能,在后台发布时将数据和页面模板整合成静态页面,存放在硬盘中。但这样的缺陷很明显,一是后台的程序的编写很复杂,二是缓存的控制只能通过人为的方式来控制,这对一些更新十分频繁的网站就是一个噩梦,网站可能在不停的做缓存的删除和重建。当然后来出现了一些自动更新这些缓存的框架,比如PHP的SMARTY模板技术,可以定义缓存过期的时间,自动去更新这些缓存。这对一些信息发布类网站已经确实适用了。
   除了整个页面的缓存技术,还有一种技术叫做“网页片段缓存技术”,将页面的部分而不是全部进行缓存。代表作有ESI cache。

 

2、数据缓存


  但是当WEB2.0兴起的今天,信息的发布已经不再是管理员统一发布的了,而是所有的用户都在发布信息,用户发布完信息后当然是想看到这些信息,而不是等到缓存时间到刷新后才看到这些数据,于是数据缓存的相关技术也就应运而生了。
比较有名的数据缓存框架有ehcache和 memcached。
  ehcache有很多缓存的分支(包括页面缓存的模块),但最核心的模块还是它的数据缓存部分,比如,当ehcache和hibernate进行整合时,能将查询出的对象集合放入内存中,下次如果再查询这个查询,将直接从内存中返回这个数据集合,不需要再进行数据库的查询,同时,你可以配置缓存的刷新模式,有read-only,nonstrict-read-write,read-write 几种模式,其中read-only表示缓存是不刷新的(要刷新就只有重启了),nonstrict-read-write表示刷新是不及时的,你可以设置超时的时间去刷新,read-write表示在数据发生变化时缓存都会发生刷新,具体怎么配置可能就要根据具体业务了。
  Memcached大致的原理也和ehcache 相同,将数据采用键值的形式存放在内存中,使用时可以将查询的md5作为键,查询的结果作为值。相对ehcache而言,memcached是一个工具,ehcache是一个框架,memcached更加底层更加灵活,当然你也要写相应的代码去使用它。
  这是一张网上的memcached图,说明了memcached在系统中的位置。
 

 

  近几年兴起的NOSQL技术,虽然现在归于数据库的一种,但其本质也是缓存技术和数据库技术的一种融合产物。

  目前缓存的做法分为两种模式:


内存缓存:缓存数据存放在服务器的内存空间中。
优点:速度快 缺点:资源有限

 

文件缓存:缓存数据存放在服务器的硬盘空间中。
优点:容量大 缺点:速度偏慢,尤其在缓存数量巨大时


数据库缓存

 


  数据库的缓存一般由数据库提供,比如ORACLE,可以对表建立高速缓存,提高对经常访问的数据的访问速度。



 
 

 

 

分布式缓存经历了多个发展阶段,由最初的本地缓存到弹性缓存平台直至弹性应用平台[8],目标是朝着构建更好的分布式系统方向发展(如下图所示). 

1) 本地缓存:数据存储在应用代码所在内存空间.优点是可以提供快速的数据访问;缺点是数据无法分布式共享,无容错处理.典型的,如Cache4j;

2) 分布式缓存系统:数据在固定数目的集群节点间分布存储.优点是缓存容量可扩展(静态扩展);缺点是扩展过程中需要大量配置,无容错机制.典型的,如 Memcached;

 

3) 弹性缓存平台:数据在集群节点间分布存储,基于冗余机制实现高可用性.优点是可动态扩展,具有容错能力;缺点是复制备份会对系统性能造成一定影响.典型的,如 Windows Appfabric Caching;

 

4) 弹性应用平台:弹性应用平台代表了云环境下分布式缓存系统未来的发展方向.简单地讲,弹性应用平台是弹性缓存与代码执行的组合体,将业务逻辑代码转移到数据所在节点执行,可以极大地降低数据传输开销,提升系统性能.典型的,如 GigaSpaces XAP. 

  

1.4 分布式缓存与NoSQL 

NoSQL 又称为Not Only Sql,主要是指非关系型、分布式、支持水平扩展的数据库设计模式.NoSQL 放弃了传统关系型数据库严格的事务一致性和范式约束,采用弱一致性模型.相对于NoSQL 系统,传统数据库难以满足云环境下应用数据的存储需求,具体体现在以下3 个方面: 

1) 根据CAP 理论,一致性(consistency)、可用性(availability)和分区容错(partition tolerance)这3 个要素最多同时满足两个,不可能三者兼顾.对云平台中部署的大量Web 应用而言,数据可用性与分区容错的优先级通常更高,所以一般会选择适当放松一致性约束.传统数据库的事务一致性需求制约了其横向伸缩与高可用技术的实现; 

2) 传统数据库难以适应新的数据存储访问模式.Web 2.0 站点以及云平台中存在大量半结构化数据,如用户Session 数据、时间敏感的事务型数据、计算密集型任务数据等,这些状态数据更适合以Key/Value 形式存储,不需要RDBMS 提供的复杂的查询与管理功能; 

3) NoSQL 提供低延时的读写速度,支持水平扩展,这些特性对拥有海量数据访问请求的云平台而言是至关重要的.传统关系型数据无法提供同样的性能,而内存数据库容量有限且不具备扩展能力.分布式缓存作为NoSQL 的一种重要实现形式,可为云平台提供高可用的状态存储与可伸缩的应用加速服务,与其他NoSQL 系统间并无清晰的界限.平台中应用访问与系统故障均具有不可预知性,为了更好地应对这些挑战,应用软件在架构时通常采用无状态设计,大量状态信息不再由组件、容器或平台来管理,而是直接交  付给后端的分布式缓存服务或NoSQL 系统. 

1.5 分布式缓存与极限事务处理 

 

随着云计算与 Web 2.0 的进一步发展,许多企业或组织时常会面对空前的需求:百万级的并发用户访问、每秒数以千计的并发事务处理、灵活的弹性与可伸缩性、低延时及7×24×365 可用性等.传统事务型应用面临极限规模的并发事务处理,出现了极限事务处理型应用,典型的有铁路售票系统.Wikipedia 认为,极限事务处理是每秒多于500 事务或高于10 000 次并发访问的事务处理[12].Gartner 将极限事务处理(extreme transactionprocessing,简称XTP)定义为一种为事务型应用的开发、部署、管理和维护供支持的应用模式,特点是对性能、可扩展性、可用性、可管理性等方面的极限需求.Gartner 在其报告中预测指出,极限事务处理型应用的规模将由2005 年的10%提升至2010 年的20%,极限事务处理技术是未来5 年~10 年的热点技术.极限事务处理的引入,无疑给传统Web 三层架构带来了新的挑战.即,如何在廉价的、标准化的硬件和软件平台之上,对大容量、业务关键型的事务处理应用提供良好的支撑.分布式缓存作为一种关键的XTP 技术,可为事务型应用提供高吞吐率、低延时的技术解决方案.其延迟写(write-behind)机制可提供更短的响应时间,同时极大地降低数据库的事务处理负载,分阶段事件驱动架构(staged event-driven architecture)可以支持大规模、高并发的事务处理请求.此外,分布式缓存在内存中管理事务并提供数据的一致性保障,采用数据复制技术实现高可用性,具有较优的扩展性与性能组合.


总结


  究竟怎样去使用缓存,使用哪一层次的缓存,是由网站本身的具体业务来决定的。缓存技术的一个原则是:让数据更靠近用户。缓存技术是一门博大精深的艺术,我也是只知些皮毛。

转载于:https://www.cnblogs.com/Evil-Rebe/p/5844448.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_763986.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写Google插件,实现自定义现有网站内容

背景&#xff1a;公司项目做完的空档时期,总是很无聊,总不能总是在看技术文档吧,总也要放松下吧,比如看看网络小说(Ps:网络上大部分小说网站都是有广告的,并且广告屏蔽有时还不能完全屏蔽掉,而且网站的样式一看就跟技术论坛技术博文之类的站点不一样的,这个时候要怎么伪装自己在…

网站权限配置管理

今天 一上班 就收到bug的提示&#xff0c;经由查看原来是 权限划分问题&#xff1b; 问题描述&#xff1a;管理员 登陆系统后 发现没有权限编辑 &#xff0c;我查看代码后发现 已经开发了 是否有权限编辑功能&#xff1b;我登陆大权限账号后 发现这个管理的编辑权限没有开启&a…

网站中三角小图标的制作方法

除了之前随笔中提到的使用图标文字来解决网站中的小图标的问题&#xff0c;还可以手写网站中的小图标&#xff0c;这主要使用到定位的相关知识就可以轻松搞定。 具体代码如下所示&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta cha…

新闻网站项目django--个人资料页

models.py: # 用户信息表 class UserProfile(models.Model):belong_to models.OneToOneField(toUser, related_name"profile") # 所属用户avatar models.FileField(upload_toavatar) # 用户头像def __str__(self):return self.belong_to.usernameforms.py&#x…

seo学习1

第一天一&#xff0c;SEO概念&#xff1a;搜索引擎优化 二&#xff0c;SEO和SEM区别&#xff1a;SEO(自然排名)&#xff0c;点击不需要付费。SEM(竞价&#xff0c;百度广告位5个),点击付费&#xff0c;排名不稳定。 SEO不能马上实现排名&#xff0c;优化周期大概三到四个月。SE…

【问底】李平:大型网站的灵魂——性能(转)

在前一篇随笔 大型网站系统架构的演化中&#xff0c;介绍了大型网站的演化过程&#xff0c;期间穿插了一些技术和手段&#xff0c;我们可以从中看出一个大型网站的轮廓&#xff0c;但想要掌握设计开发维护大型网站的技术&#xff0c;需要我们一步一步去研究实践。所以我打算写一…

SEO那些事:一句代码一键分享网站

这是很久以前就已经写过的笔记了&#xff0c;有一个习惯&#xff0c;每次遇到一个问题&#xff0c;都会进行百度&#xff0c;然后把解决问题的关键点记录下来&#xff0c;有人问我&#xff0c;为什么更新频率如此之快&#xff0c;大部分都是从前积累的知识点。其实每天工作所涉…

解决宝塔面板 创建站点后 访问的站点不存在

宝塔面板域名管理 请注意对照域名填写是否有误&#xff0c;www和不带www的域名是否都已经添加到域名管理中&#xff0c;将域名填写进去即可解决问题&#xff01; 综上&#xff0c;“您的请求在Web服务器中没有找到对应的站点”错误&#xff0c;90%是由于www域名和不带www域名没…

使用 rel=alternate 移动属性优化移动网站SEO

前文介绍了 <link> 的属性 relcanonical &#xff0c;这是本文要介绍 <link> 的另一属性 relalternate 的原因&#xff0c;因为这两者有着密切的对应关系。 很多人也许会问&#xff0c;什么是 relalternate &#xff1f;我们该如何使用 relalternate &#xff1f…

网站运维之 风险防控

引言 对于网站运维是一个比较要细心有耐心的工作&#xff0c;当一个网站从开发到上线后&#xff0c;后期的维护也很关键&#xff0c;特别是对于引流的网站来说更是至关重要。 对于网站运维的内容大致可以分为&#xff1a; SEO流量监控方面&#xff1b;风险防控&#xff1b;访问…

3GPP协议文档查询网站

对于Android Telephony开发的工程师而言避免不了要接触3GPP协议&#xff0c;特别是通话和补充业务相关&#xff0c;深入了解3GPP协议&#xff0c;可以加快问题的分析和处理速度&#xff0c;本文主要介绍日常常用的3GPP协议文档查看网站。 3GPP官网. 3GPP官方网站&#xff0c;这…

在授权的情况下对某医药网站检测思路

本人菜鸟&#xff0c;作此记录仅提供思路学习&#xff0c;感谢Ghost老兄帮忙提供思路。 一、信息搜集阶段 1、使用kali 的whatweb对网站大概框架进行收集。得知80端口为asp.net 4、IIS 7.5并且得到IP 2、访问ip返回与域名相同的页面&#xff0c;确定为真实ip&#xff0c;记录下…

Bugku-网站被黑

网站被黑 http://120.24.86.145:8002/webshell/ 这个题没技术含量但是实战中经常遇到 解题思路&#xff1a; 打开链接是一个黑页&#xff0c;链接后面加index.php判断是PHP&#xff0c;而题目提示实战中经常遇到&#xff0c;那就开御剑扫描后台吧 扫描出shell.php,打开链接是一…

BugKu -- 程序员本地网站

程序员本地网站 100 http://120.24.86.145:8002/localhost/ 请从本地访问 这道题要求从本地访问&#xff0c;打开burpsuite抓包&#xff0c;加上&#xff1a;X-Forwarded-For: 127.0.0.1 就好了 X-Forwarded-For: 简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请…

树莓派大用处,利用校园网搭建一个校园局域网站

1. 缘由 事情是这样的&#xff0c;我们学校的校园网平主要都是以WiFi的提供服务的&#xff0c;平是我会再电脑上将文件夹共享&#xff0c;这样我就躺在床上访问电脑上的文件。有一天我就想&#xff0c;那学校的内网是不是再各个地方都是互通的&#xff0c;只是我平时都在宿舍连…

SQL在线学习网站

SQL在线学习网站 1.在线编写网页&#xff1a;http://sqlfiddle.com/ 2.SQL菜鸟教程&#xff1a;http://www.runoob.com/sql/sql-intro.html 3.SQL语句在线练习 http://sample.jimstone.com.cn/xsql/ 4.SQL语句测验 http://www.w3school.com.cn/quiz/quiz.asp?quizsql 5.sql语…

lammps教程:推荐一个LJ力场参数查询及参数转换网站

使用lammps模拟时经常会用到LJ力场参数&#xff0c;这些参数可从已发表的文献中查到&#xff0c;但是查找起来相对麻烦&#xff0c;可能需要查阅很多篇论文才能找到需要的参数。 推荐一个LJ参数查询网站&#xff1a; http://lammpstube.com/mdpotentials/直接点击元素名称即可…

lammps教程:推荐一个不同单位下压强自动转换网站

大家好&#xff0c;我是小马老师。 在进行lammps模拟时&#xff0c;不同units下同一个物理量的单位有所不同。 例如&#xff0c;在metal单位下&#xff0c;压强的单位为bars。 在real单位下&#xff0c;压强的单位为atmospheres。 一般在处理结果或者设置压强时&#xff0c…

Nginx之expires缓存提高网站负载

引言 因为关心到过期时间&#xff0c;所以服务器的日期要准确&#xff0c;时间不准确&#xff0c;一切设置都是“白扯”。 ⇒ ⇒ ⇒ 修改系统时间&#xff1a;   date -s ‘2018-10-01 16:33:44’   clock -w # 写入配置文件 浏览器自带的304 也是一种很好的缓存手段 expi…

大型网站架构演化

《大型网站技术架构》读书笔记&#xff1a;1.1大型网站软件系统的特点与传统企业应用系统相比&#xff0c;大型互联网应用系统有以下特点。高并发&#xff0c;大流量高可用海量数据用户分布广泛&#xff0c;网络情况复杂安全环境恶劣需求快速变更&#xff0c;发布频繁渐进式发展…