php-web开发中的缓存
缓存的作用:减少内存,cpu资源的消耗
缓存中需要关注的问题:
1 缓存命中率
2 缓存的更新策略
3 缓存单条数据的最大值
4 缓存总量的大小
客户端缓存,http协议中使用缓存
HTML Meta标签控制缓存
http控制缓存的机制–如果有缓存
1 先读取Etag- ----if-not-match
2 last-Modified------if-modified-since
Expires策略:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。不过Expires 是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。Expires 的一个缺点就是,返回的到期时间是服务器端的时间,这样存在一个问题,如果客户端的时间与服务器的时间相差很大(比如时钟不同步,或者跨时区),那么误差就很大,所以在HTTP 1.1版开始,使用Cache-Control: max-age=秒替代。
Cache-control策略(重点关注):Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存,该选项并不是说可以设置”不缓存“,容易望文生义~
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存,完全不存下來。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。
Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
cdn和反向代理
网站需要加速网站的访问速度,主要手段有使用CDN和反向代理。
SDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;
而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
使用这两个技术,都是为了:一方面加快用户访问速度,另一方面也减轻了后端服务器的负载压力。
文件缓存
文件缓存
我们可以直接访问静态页面,
opcache
OPcache 函数
opcache_compile_file — 无需运行,即可编译并缓存 PHP 脚本
opcache_get_configuration — 获取缓存的配置信息
opcache_get_status — 获取缓存的状态信息
opcache_invalidate — 废除脚本缓存
opcache_is_script_cached —
opcache_reset — 重置字节码缓存的内容
php的中间字节码可以缓存在文件,如果代码没有变动下次不用重新编译,直接指向
web服务器缓存
nginx的缓存
在http段加入代码配置缓存参数
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:50m inactive=20m max_size=30g;
nosql
数据库缓存
mysql也可以缓存的
query_cache_size = 268435456
query_cache_type = 1
query_cache_limit = 1048576 以上语句的设置中 query_cache_size 是分配256M内存给Query Cache;query_cache_type=1,是给所有的查询做Cache;query_cache_limit 是指定个别的查询语句1MB的内存