网站高并发第二课之《缓存优化》

 

接下来我们将介绍三种缓存方式:文件缓存,内存缓存,中间字节码缓存。...

后台君

一个正走在创业路上,热爱技术,喜欢读书和音乐的程序员。


网站并发
引言:我们知道数据库往往是一个网站的瓶颈所在,对于mysql这样的关系型数据库来说,更是如此。现在大多数主流的网站都将热数据(比较常用且变化较频繁的数据,如访问量等)放在缓存中,而数据库的职能则为存储冷数据,以及持久化保存热数据。这样做的原因,不仅仅是数据库比较慢,还因为使用缓存的性价比比提高数据库连接数来得高。接下来我们将介绍三种缓存方式:文件缓存,内存缓存,中间字节码缓存。

1.文件缓存

        假设我们程序的配置信息是放在数据库中的,每次程序执行都要到数据库去取配置信息,但配置信息又是不经常修改的,每次重数据库读记录是不是很慢呢。

这个时候我们就可以使用文件缓存的方式,将从数据库取出的数据存到某一个文件中,并设置过期时间,

在有效时间内,直接读取该文件的内容即可,这样就省去了读取数据库的操作,对于提高网站并发大有帮助)。关于具体的实现代码,网上有许多实现类,大家可以下载下来研究下哈,这里不作赘述。

2.内存缓存

        内存缓存,目前主要是memcache和redis两种。

两者都是成熟的内存缓存软件,并且操作都是原子性的,在各个并发量大的网站上得到了广泛的应用。前者是简单的键值对存储,而后者具有丰富的数据结构(如集合,队列等)。如果你要实现的只是简单的键值对,memcache做的比redis要好。但如果你需要实现比较复杂的功能,那我还是推荐使用redis哈。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。篇幅有限,这里就只以一张截图介绍redis的主要特性。
他们都提供了各种主流语言使用的api,可自行编译安装后,参考文档使用。

3.中间字节码缓存

首先我们来看一张图片
从这张图里,我们不难看出php文件并不是直接执行的,而是需要由Zend引擎编译成opcode字节码,然后再解析执行。而这一过程是需要耗费服务器资源的。假设有1W个用户访问这个脚本,那么服务器就需要重复编译1W次这个文件,效率可想而知。php为我们提供了一个拓展:opcache,用于将服务器生成的opcode缓存一段时间,在该时间内,用户访问该脚本将不再重复生成opcode,而是直接从缓存中取,效率大大上升。现在比较火的HHVM正是基于这种方式,以提高网站的并发。
长按二维码关注我


    关注 后台君


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册