研究了一段时间的缓存清除,说说了解的三种方式吧。

 
     1. 原始的只增加缓存模块的,根据访问的路径一条条清除。
根据此方式要进行批量清除的话,必须在设定的缓存目录下通过自己写的程序来读取nginx文件中的配置,然后根据配置文件中的路径查找缓存文件,找到配置的缓存文件,并索引,然后根据索引的缓存路径值执行单个文件清除。
此方法,大量时间耗费在缓存文件的查找上,当文件上G的时候就很慢,文件越多速度越慢。
还有一个脚本实现方式在此 nginx-cache-purge,里面用了并行的查找相对快点,不过速度还是慢。
 
       2.修改缓存代码,实现按域名(可以适当加路径)来缓存,这样可以快速定位到需要的文件夹中进行批量清除。
此方法,只是在缓存文件的路径前增加了一个域名目录,其他操作和第一种类似 ,这样可以大大提高速度。至少不用全局搜索。
相应的代码 在此有说明 Nginx配置缓存,按域名存放。如果增加了域名下的目录的话可能会更快一点,但是感觉会影响性能,本人测试了一下,在域名 + 5级目录的情况下一般可以正常访问,只是有时候会出现访问不了的情况,不过刷新一下就可以。不过要增加文件目录为缓存路径的话必须考虑uri中的特殊字符和linux系统文件路径长度的问题。
 
       3.也是修改代码 生成一个group key来缓存同一类型的文件,清除的时候可以根据groupkey来缓存。
这个是一个外国人写的补丁,可以设定某个关键字来清除。可以根据需要灵活设定。相应的说明在此 Nginx cache grouped by keys 。这个配置比较灵活,可以根据需要设定,例如也可以配置一下,根据目录来缓存,但一个文件只能有一种类型的groupkey。因此要是设置了父目录为groupkey的话,再设置子目录就会根据子目录来进行groupkey。因此,可以实现的是根据每个目录来缓存,清除的时候只能一次清除一个目录的文件,要想清除整个域名下的缓存的话就得所有目录的缓存清除了。
 
 
要想即实现能一次清除整个域名下的目录又能在需要的时候清除某个一个具体目录下的文件,或清除单个文件这个有点麻烦??
 
可以通过修改代码实现带*通配符的指删除,先将文件移动 到一个目录后再清除 ,这样能表面上实现瞬间的清除,删除工作在后台进行着。
      还有要是直接把缓存路径中的目录删除的话会对访问有影响?内存中的值会被释放?里面的红黑树会变化?

nginx缓存批量清除的更多相关文章

  1. Nginx缓存配置之手动清除缓存

    访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...

  2. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  3. nginx缓存设置proxy_cache

    http://www.cnblogs.com/dudu/p/4597351.html http块: proxy_cache_path /tmp/cache levels=1:2 keys_zone=n ...

  4. 分布式Nginx缓存清理(PHP的socket编程)

    最近,公司要使用康乐的几台自建CDN换成Nginx,在缓存配置上不会有很多的问题,纠结的问题是:Nginx的如何批量进行缓存清理 我们都知道Nginx提供了一个第三方的模块"nginx ng ...

  5. nginx缓存优先级(缓存问题者必看)

    接触nginx的兄弟或多或少都有遇到缓存问题,要么是nginx为什么不缓存,要么就是nginx缓存很快就失效等等问题,在网上找了一遍nginx缓存优先级的文章,大家可以参考下. 架构图client端  ...

  6. Nginx使用教程(五):使用Nginx缓存之缓存静态内容

    NGINX虽然已经对静态内容做过优化. 但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能. NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在 ...

  7. Nginx详解十一:Nginx场景实践篇之Nginx缓存

    浏览器缓存: HTTP协议定义的缓存机制(如:Expires.Cache-control等) 当浏览器第一次请求的时候,浏览器是没有缓存的 第二次请求开始就有缓存了 校验过期机制 配置语法-expir ...

  8. Nginx缓存配置以及nginx ngx_cache_purge模块的使用

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  9. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...

随机推荐

  1. CopyOnWriteArrayList的增删改查实现原理

    https://www.cnblogs.com/simple-focus/p/7439919.html 篇文章的目的如下: 了解一下ArrayList和CopyOnWriteArrayList的增删改 ...

  2. NETCORE openSUSE docker 安装

    openSUSE docker 安装https://www.jianshu.com/p/c725a06447d5 zypper命令使用示例https://www.cnblogs.com/linuxpr ...

  3. pyhive -- thrift.transport.TTransport.TTransportException: TSocket read 0 bytes

    Pyhive 远程连接hive出现问题: from pyhive import hive import pandas as pd #Create Hive connection conn = hive ...

  4. loadrunner学习--基础知识

    性能测试相关术语: 1.响应时间:指系统从发出请求开始到客户端接受到所有数据所消耗的时间. 2.并发用户:指同一时刻与服务器进行数据交互的所有用户数量.计算公式F=Nvu x R/T 其中F表示吞吐量 ...

  5. c++ primer 中讲的顶层const 和 底层 const 理解

    c++ primer 中讲的    顶层const 和 底层 const   以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...

  6. Mybatis学习笔记8 - resultMap自定义结果集映射规则

    一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public ...

  7. linux信号的处理--部分源码分析

    基于linux master v4.9版本 信号是异步的, 一.信号何时来 信号是异步的,对于一个进程随时都会接收到信号. 二.选择线程(task)来处理 那么一个进程接收到信号时,需要选择一个tas ...

  8. GCC操作

    GCC编译器常用选项 生成动态链接库: gcc file.c -fPIC -o file.so, PIC表示Position-Independent Code: 独立地址代码 编译: gcc -c f ...

  9. MyEclipse项目中的文件点击右键Team选项中没有提交到SVN中的选项是怎么回事

    MyEclipse项目中的文件点击右键Team选项中没有提交到SVN中的选项是怎么回事 其实你已经可以百度到很多方法: 例如下面博客提供的 http://www.xuebuyuan.com/95285 ...

  10. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...