那些“cache”和“buffer”(二)

前面一篇文章谈了一些Linux系统层面的cache和buffer。这里主要谈谈应用层面的那些cache。相比系统层面的cache集中在IO上,应用层面的cache就显得五花八门了。就从WEB说起吧。

web缓存对于服务器和客户端都是不可或缺的。

对于web服务器来说,缓存是非常重要的东西,它可以大大的增加并发,缩短相应时间,减少服务器负荷。原理很简单。因为对于一个URL来说,很短时间内它的内容变化其实是不大的,如果每次请求都要服务器算一遍就显得太浪费了。所以web缓存就是放在web服务器前面的一个代理,它接收用户请求,并向后端请求,在返回响应的时候将这些响应缓存起来,遇到请求时不经过服务器计算直接返回响应,从大大提高响应速度,尤其是在请求量很大的时候。web缓存代表作是squid和varnish。

对于客户端的浏览器来说缓存同样不可或缺。甚至在HTTP协议中都为缓存提供了支持,HTTP返回码304 Not Modified就是告诉浏览器,你要的内容没变,用你缓存中的吧。在HTTP协议之外,浏览器自己也会做许多的缓存,对于图片啊,js什么的,短时间内的请求就自作主张直接不去远程取了,会大大减少请求量,从而节省大量的时间,用户需要速度。况且浏览器和服务器本是同根生嘛,不必相互煎熬。所以有时候你得强制刷新。

与web服务器紧密相关的就是数据库了。

在数据库系统中,缓存同样无处不在。因为同样的道理,对同一个sql查询来说,在某些条件下(比如它查的表自上次查询后都没更新过)它的结果就应该和上次查询一样的。于是mysql提供了query cache。也有些框架提供了缓存功能,比如hibernate。这都是读缓存,目的在于读很多,而写比较少的时候提高读的性能,如果写很多,而读比较少的话这类缓存就没什么用了。于是,在一些情况下我们希望可以为数据库引入写缓存。典型的是主键查询和更新。于是出现了kv数据库(比如memcached)。可以提供基于主键查询的读写缓存。这对于提高数据系统的整体性能是极其重要的。

其他五花八门的cache还有那些呢?

比如dns缓存,dns缓存同样存在于客户端和dns服务器中,与web缓存的原理是一样的。将dns的解析结果缓存起来。

比如arp缓存,将arp的结果缓存起来。

甚至,连编译系统也引入了缓存比如ccache,比如visual studio中的pch(预编译头)机制。

最后,我想说的是:cache is king! cache is everywhere!


原始出处


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值