网站缓存原则:多读内存,少读硬盘。买不起SSD的话,磁碟硬盘读取就有那么几百毫秒延迟,所以尽量消除掉。
网站读取流程:
Nginx(I/O)->(遇到动态请求)->PHP(I/O)->(遇到数据库查询)->MySQL(I/O)
Nginx(I/O)->(遇到文件请求)->Disk(I/O)
优化步骤如下:
Nginx 需要缓存 SSL 证书,设置如:https://nginx.org/en/docs/http/ngx_http_ssl_module.html
PHP 安装 OPcache 将脚本读取至内存,如果有更新检查时间更好,在此时间内 PHP 脚本都会直接从内存读取
MySQL 已自带缓存机制,需合理设置缓存区大小,让读取频度最高的数据实现直接从内存取出。
Nginx 可设置缓存文件至内存,如 CSS/JS 类文件:https://www.jianshu.com/p/625c2b15dad5
网站程序实现动静分离,即评论、账户信息等使用 AJAX 加载,并设置不允许缓存。
而文章页、首页等,由 PHP 程序添加 cache-control 头,并由 Nginx 缓存至内存。
这样用户更新信息后,内存会在指定时间后检测内容是否已更新,并替换内存数据。
图片等尽量使用CDN进行静态缓存。
这样访客读取时,关键数据都可直接从内存读取,从而减少硬盘压力。