数据结构很有意思
最近看《PHP核心技术与最佳实践》一书时,有提到PHP的数组实现是依赖于哈希表,包含哈希碰撞、哈希函数、拉链表等等,觉得很有意思,于是重拾大学时期简单学过的数据结构,结果在看Mysql资料时,也涉及到数据结构方面知识,感觉打开了一扇新大门。
请求缓存学习
学习了TP5的请求缓存内容,特此来总结一下。
在App::run()方法内,存在如下代码
$request->cache(
$config['request_cache'],
$config['request_cache_expire'],
$config['request_cache_except']
);
先来看看config配置对应三个参数是什么意思
// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
’request_cache’ => false,
// 请求缓存有效期
’request_cache_expire’ => 3600,
// 全局请求缓存排除规则
’request_cache_except’ => [],
从注释文字来理解,
request_cache用来控制请求缓存是否启动
request_cache_expire表示缓存支持的时间
request_cache_except作类似白名单作用,若想要排除指定请求不使用缓存,可预先设置
请求缓存是什么呢?
了解一下http的304状态(Not Modified),借用《图解HTTP》的描述是:
该状态码表示客户端发生附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。304状态吗返回时,不包含任何响应的主体部分。
附带条件是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部。
先举一个例子:
访问html类型文件,
第一次访问状态码:Status Code: 200 OK
第二次访问状态吗:Status Code: 304 Not Modified
我对这部分原理还是似懂非懂的感觉,所以就不说明避免误导了。主要是想通过访问html文件来说明,返回304状态码的前提必须得有一次200初次通信,那么在后续判断了文件未过期,且内容未修改后,服务器端直接返回304状态码,不需要再传输content,减少了通信数据量,页面加载缓存下来的数据来提高的体验。
上面说了html静态页面缓存的好处,再回到thinkphp5,就有疑惑的地方了,一般PHP作为动态请求,能使用缓存吗?就当能使