使用redis来缓存PHP数据可以大幅降低客户端请求对PHP服务器的压力,也可以大幅加快请求完成的速度。
首先定义一个
使用redis来缓存PHP数据可以大幅降低客户端请求对PHP服务器的压力,也可以大幅加快请求完成的速度。
首先定义一个测试文件test_cache.php,这个脚本只是单纯的通过curl获取远程地址的一张图片
1 2 3 4 5 6
| $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://redis.io/images/redis-white.png'); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl);
|
然后配置Nginx,由于Nginx自带的扩展只有memcached的,而memcached没有redis功能强大,所以需要使用第三方扩展,一共需要5个扩展
srcache-nginx-module
echo-nginx-module
ngx-http-redis
redis2-nginx-module
set-misc-nginx-module
把这5个扩展编译到Nginx或者使用动态模块,动态模块可以看
Nginx动态加载模块这篇文章
接着配置Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| if ($uri ~ test_cache.php$){ set $key $request_uri; set_escape_uri $escaped_key $key; srcache_fetch GET /redis $key; srcache_default_expire 172800; srcache_store PUT /redis2 key=$escaped_key&exptime=$srcache_expire; add_header X-Cached $srcache_fetch_status; set_md5 $md5key $key; add_header X-Redis-Key $md5key; add_header X-Cached-Store $srcache_store_status; add_header X-File $key; add_header X-Query $query_string; add_header X-Expire $srcache_expire; }
|
这段Nginx配置语句指定了缓存的访问通过/redis这个获取,缓存PUT通过/redis2获取这个时候再来定义/redis和/redis2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| location = /redis { internal; set_md5 $redis_key $args; redis_pass 127.0.0.1:6379; } location = /redis2 { internal; set_unescape_uri $exptime $arg_exptime; set_unescape_uri $key $arg_key; set_md5 $key; redis2_query set $key $echo_request_body; redis2_query expire $key $exptime; redis2_pass 127.0.0.1:6379; }
|
这两段配置代码就是定义如何存储缓存和如何取缓存。
配置完了后访问test_cache.php就可以发现第一次头中有MISS,而第二次就有HIT,说明缓存命中成功,同时第一次请求服务端花了600毫秒,但是第二次只用了50ms,而且第二次并没有调用php的curl而是直接从redis缓存中获取的,省去了php脚本执行时间。