计算机科学里最难的事情
余果
计算机科学中最难的两件事是缓存失效和命名。
-- Phil Karlton
今天我来谈谈在计算机科学中最难的两个问题其中的一个:缓存。
我本来想用这一章很浮光掠影地谈一下“高性能网站”的各个方面的话题,但是我发现根本不可能讲全。光是列出目录就能打出一千字,而且这样的专栏没有什么可读性。全栈工程师面对的是一片大海,如果我能描绘通往大海的一条小河,引起你的兴趣,就非常不错了。
缓存在高性能站点中起到举足轻重的作用,优化算法和压缩图片带来的优化效果可能远远不如缓存来好。
我在西安电子科技大学读书的时候,当时图书馆楼还在新建中,所以图书馆临时设立在自习室的五、六两层楼。图书馆的入口在五层,大部分书按照分类放在六楼的不同房间。但是有趣的一点设计是,被归还的书会暂时放在五楼入口旁边的一个房间,因为这些书被挑选出来阅读,那就很有可能再次被挑选出来。所以这些书就不用浪费时间特别去整理回六楼了,我也会常常去这个房间看看有哪些热门图书。
我的理解是,这个房间就是图书馆的缓存。因为它具备缓存应有的三个功效:
1、存储频繁访问的数据(图书)
2、内存缓存减少磁盘IO(去6楼挑书)
3、保存耗时的操作,以便下次使用(找书和整理书是耗时的操作)
下面,我谈谈一个web站点,它的数据流从服务器端到浏览器端,哪些地方可以使用缓存来优化速度。
数据库查询缓存
我们从数据库来开始。
数据库里的数据量往往是非常大的,而对于数据的查询又是比较耗时的操作,所以我们可以开启MySQL查询缓存来提高速度,并且减少系统压力。MySQL默认不开启查询缓存,但我们可以通过修改MySQL安装目录中的my.ini来设置查询缓存。设置的时候可以根据实际情况配置缓冲区大小、单个查询的缓冲区大小等。
不过这不是重点,重点是要了解适合设置查询缓存的场景。因为每一次select查询语句都会被缓存起来,如果一直都没有发生DML操作,下一次…