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

 
     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. 1.centos7 安装zookeeper

    1.安装jdk 1)查找jdk包: yum search java|grep jdk 2)安装: yum install -y java-1.8.0-openjdk.x86_64 2. 安装ZooKe ...

  2. 垃圾收集GC

    一.引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不能再被使用的.引用计数法实现简单,判定效率也很高,但是它很 ...

  3. OpenStack Weekly Rank 2015.08.03

    Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 11 Sw ...

  4. 深入学习webpack(三)

    在前面两篇博客中,主要讲了webpack的使用和webpack的核心概念,他们都是非常重要的,在这篇博客中,讲主要讨论webpack配置相关问题. 参考文章:https://webpack.js.or ...

  5. HDU 5407——CRB and Candies——————【逆元+是素数次方的数+公式】

    CRB and Candies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. Navicat连接Oracle数据库报错ORA-28547解决方法

    先说明下我机器的环境: 1.Win10 - 64bit 2.Navicat Premium_11.2.7  - 64bit 3.未安装Oracle数据库(包括Client也未安装) 解决方法: 1.下 ...

  7. JVM:java类的加载机制

    原文连接:https://www.cnblogs.com/ityouknow/p/5603287.html 类加载机制的奥妙. 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读 ...

  8. spring boot Configuration Annotation Proessor not found in classpath

    出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationPropertie ...

  9. php数组的定义

    数组的主要作用就是存储数据,修改数据. 数组:就是把多个数据放在一起管理. 数组可以存入多个不同类型的数据,是一个复合数据类型.   在PHP中,有两种方式定义数组 //$array = array( ...

  10. Chrome浏览器安装vue-devtools插件

    插件功能:方便在浏览器调试vue代码 插件git地址:https://github.com/vuejs/vue-devtools 因为chrome要FQ,打不开,所以不能直接进去安装拓展程序,只能选择 ...