Web全栈工程师的自我修养-笔记-高性能网站的关键:缓存

缓存对于站点性能起到举重若轻的作用。很多时候,优化算法和压缩图片带来的优化效果可能远不如优化缓存。

缓存能否获得性能增益,取决于很多因素:

①关于服务器压力/数据库使用情况/提供的服务类型
②关于用户如何访问网页/用户网络环境

缓存的功效有:

存储频繁访问的数据。
内存缓存减少磁盘I/O。
保存耗时操作,以便下次使用。

一个web站点中,它的数据从 服务器端浏览器端,可以使用缓存优化的有:

1.服务器缓存

当服务器内存/CPU性能不好/共享虚拟服务器时,服务器的计算时间可能占整个页面响应时间的很大一部分。

服务器性能为主要瓶颈

1.1基本数据库查询缓存

MySQL数据量大,查询耗时。默认不开启查询缓存,可以修改安装目录中的my.ini设置查询缓存。根据实际情况配置缓冲区大小/单个查询的缓冲区大小等。

希望优化MySQL服务器的查询性能和速度,可以在MySQL配置中增加:
query_cache_size=SIZE(SIZE默认为0,即关闭状态)
query_cache_type=OPTION(OPTION有:0-不将查询结果缓存起来,也不从缓存中获取查询结果;1:所有的缓存结果都缓存起来,除非查询命令以SELECT S_NO_CACHE开始。2:只缓存查询命令以SELECT SQL_CAHE开始的查询结果)

1.2 适合设置查询缓存的场景:

查询从操作远多于修改操作的数据库。
修改过多的数据库不适合,因为写缓存也花费时间,会更慢。
检验:设置缓存后,查询命中率,不高的话取消设置查询缓存。

1.3 扩展数据库缓存:memcached

MySQL自带缓存有一个问题,它的缓存池大小在SQL所在的服务器上开辟,可使用的内存空间有限。
在大型网站中,需要使用服务器集群实现数据库缓存。
memcached是一个高性能分布式内存对象缓存系统,用于减轻数据库负载。相当于应用程序与数据库之间的中间层,通过网络API设置和调用。

当存在服务器集群时,才会有优势。

 1.4文件缓存:

除了将数据库查询结果缓存在内存中,还可以将被频繁造访的数据缓存在文件中。好处在于:
硬盘容量比内存大。
数据更安全,断电后在。
易于扩展,可添加硬盘。
缺点是:速度不如内存缓存。
缓存查找优先级按照速度进行:内存缓存-->文件缓存-->数据库。

memcached与数据库缓存配合使用:数据库缓存只要表更新,则对该表的查询缓存全部失效;memecached以时间过期设置。

1.5静态化

1.静态化插件:新文章自动生成静态页面,仍旧保存在数据库中。服务器接收请求后,直接给出静态化页面,不进行计算和数据库查询。

2.抛弃服务器,例如使用JekyII系统写博客,将整个站点静态化。可以将生成的静态网页直接托管在静态资源站点,不用担心数据库服务器的问题,稳定低廉。玩去拿静态化的站点,使用第三方插件支持用户生成内容。通过javascript代码插入到静态页面,相应用户数据存储在三方插件的服务器上

2.浏览器缓存

针对网络连接为主要瓶颈,通过设置浏览器缓存来跳过http请求。

对于用户,减少请求可以快速加载页面,减少流量;对于网站,减少带宽压力和费用。

对于浏览器,如何缓存一个资源是服务器端指定的策略,自己只是根据服务器的“指令(https头)”来执行。

2.1 主要有两种缓存指令:

①Expires,直到一个日期前都不在询问服务器;最快,直接从缓存中获取,不再询问服务器。所有的静态资源可设置。

通过改变QureyString ,通知客户端服务器端文件修改——QureyString修改后服务器端CGI或应用程序可以理解,浏览器会将其视为新的URL资源。

②Last-Modified,浏览器只询问服务器文件是否更新,若无更新,浏览器只应答无更新304http头,不必返回文件。若更新,返回httpt头请求文件200,并把整个文件作为http正文发送给浏览器。

可以通过查看服务器的log,查看304响应与200响应的比例,作出合理的缓存决策。

③新属性:Cache-Control:从浏览器收到某文件开始倒计时。(HTTP 1.1)

2.2 浏览器缓存设置推荐:

  • 动态生成的HTML页面使用HTTPS头:Cache-Control:nocache.
  • 静态HTML页面使用HTTPS头:Last-Modified.
  • 其他类型文件设置Expires头,并且在文件内容有所修改时修改Qurey String.
  • (服务器缓存规则不能掌控的地方之二)当存在文件被运营商服务器劫持时,修改资源的文件名,比修改Qurey String更可靠。

2.3 QQ空间静态资源在浏览器端使用的缓存策略:

  • 动态生成的HTML页面使用HTTPS头:Cache-Control:nocache.
  • 静态HTML页面使用HTTPS头:Last-Modified.
  • 其他类型文件设置Cache-Control头,并且在文件内容有所修改时修改资源的文件名。(使用自动化的方式生成新文件名并修改引用它的文档里的文件名。)

3. Restful Web API

表征性状态传输(Representational State Transfer,REST)是一种软件架构风格。

3种主流web实现方案中,REST模式最简洁,能合理利用HTTP操作的语义。

目的是定义如何正确使用web标准,使用http本身特性。

Tips:

名值对=键值对=属性值对

名值对存储是数据库最简单的组织形式。基本上所有的编程语言都带有应用在内存中的键值对存储。

在计算机科学中,是一种基本的数据表示在计算系统和应用程序中。设计人员通常希望开放式的数据结构,可以在未修改现有的代码或数据的情况下进行未来扩展。在这种情况下,数据模型的全部或部分可以表示为元组的集合< name,value >;每个元素都是名值对,根据特定应用程序和程序员选择的实现。

一些常见的应用有电子邮件、在网址中查询字符串、一些数据库系统 - 键值数据、Windows注册表和OpenStreetMap映射数据。

一些计算机语言把名值对作为标准语言特征来实现名值对,或更频繁的名值对集合。



你可能感兴趣的:(Web全栈工程师的自我修养-笔记-高性能网站的关键:缓存)