nginx清除缓存图片
2013-10-11 17:26
295 查看
本帖最后由 netexr 于 2013-7-8 17:10 编辑 先看下proxy_cache_path的常见配置: proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=one:10m max_size=1g; 复制代码 在上面这行配置中定义了一个反向代理缓存路径: 1) nginx反向代理缓存的目录为/usr/local/nginx/cache; 2) 缓存文件的key和其它信息放在一个10M的共享内存中,命名为one; 3) 缓存文件最大占用1G磁盘空间; 那还有一个level=1:2是什么意思呢?举个例子吧: 比如有一个URL是http://www.libertyvps.com/1.png,那么这个图片如果被缓存那他的路径就是 /usr/local/nginx/cache/9/ad/e0bd86606797639426a92306b1b98ad9 计算方法: 1) nginx先把请求地址/1.png用md5进行哈希,得到e0bd86606797639426a92306b1b98ad9 2) level=1:2就是把最后一位数9拿出来建一个目录,然后再把9前面的2位建一个目录,最后把刚才得到的这个缓存文件放到9/ad目录中。 同样的方法推理,如果level=1:1,那么缓存文件的路径就是/usr/local/nginx/cache/9/d/e0bd86606797639426a92306b1b98ad9 上面的例子只是最简单的URL,如果带参数呢? 比如http://www.libertyvps.com/1.png?v=1,那么缓存路径还是一样吗? 先对比下这个两个配置 proxy_cache_key $uri; proxy_cache_key $uri$is_args$args; 复制代码 第一个配置只根据不带参的$uri进行哈希,所以这时候加了参数和没加参数是一样的结果; 第二个配置就是把域名之后所有的内容(也就是$request_uri)都进行哈希。 知道了缓存路径的计算方法,我们就可以进行缓存清理了。 #!/usr/bin/env php <?php $cache_dir = '/usr/local/nginx/cache/'; $request_uri = $argv[1]; $url_hash = md5($request_uri); $dir1 = substr($url_hash,-1,1) . '/'; $dir2 = substr($url_hash,-3,2) . '/'; $cached_file = $cache_dir . $dir1 . $dir2 . $url_hash; if (is_file($cached_file)) { if (unlink($cache_dir . $dir1 . $dir2 . $url_hash)) { echo $request_uri . " 缓存清除成功\n"; } else { echo $request_uri . " 缓存清除失败\n"; } } else { echo $request_uri . " 未被缓存\n"; } 复制代码 说明: 1) MD5哈希过之后的路径是十六进制的,对于nignx来说查询速度更快; 2) level=1:2会比level=1:1建立更多的目录,适合缓存海量文件,因为单个目录下的文件太多会降低IO性能; 3) 缓存会先被写入写入临时文件,所以建议proxy_cache_path和proxy_temp_path放在同一个文件系统当中; 4) 虽然nginx有通过HTTP协议删除缓存的第三方插件,但是我考虑之后觉得还是不用的好。nginx的缓存本来就不是很成熟,外加一个第三方插件就更不让人放心了。 |
相关文章推荐
- 用nginx作为图片服务器(mfs)的前端缓存
- 将网络图片从本地缓存中清除
- c#实现简单的windows服务实例--清除图片缓存定时器服务
- Glide获取缓存大小并清除缓存图片
- nginx图片缓存服务器配置实战
- NSOPeration 之UItabView无沙盒缓存——UITabView下载图片后 从操作缓冲池清除下载操作
- Nginx图片防盗链、缓存和压缩的示例
- UIImageView帧动画清除缓存图片,防止图片占用内存太多
- nginx删除图片缓存
- Android开源框架Universal-Image-Loader 清除缓存的某一张图片
- 清除图片缓存SDImageCache
- nginx缓存图片,提高访问速度
- nginx清除缓存ngx_cache_purge
- SDWebImage框架清除内存中的缓存图片
- 图片缓存和清除
- 【代码笔记】清除图片缓存UIActionSheet
- Glide作为图片缓存,清除缓存的合理方法
- PHP脚本批量清除nginx缓存的方法
- 图片磁盘缓存量的大小显示和,清除缓存实现 ------ 基于glide
- LruCache缓存图片+清除本地缓存