缓存

  • 缓存的基本思想是利用客户端访问的时间局限性,将客户端访问过的内容做一个副本,在一定时间内存放到本地,当改数据下次被访问时,不必连接到后端服务器反复去查询数据,而是由本地保存的副本响应数据。

  • 保存在本地的这些副本具有一个过期时间,超过该时间将会更新。判断一个副本数据是否为过期数据的办法有很多,可以使用保留时间来判断,也可以使用数据完整度来判断。

  • 许多Web服务器还具有校验功能,就是当某些副本数据过期以后,先向后端服务器发送校验请求,后端服务器对这些数据进行校验,如果发现原数据和副本没有差别,则将过期副本重新置为可用副本。

  • 缓存的好处
  1. 减轻服务器负载
  2. 提供网页响应效率
  3. 降低网络阻塞,增强网络可扩展性
  • 为什么使用缓存?
  1. 服务器处理能力以及负载能力出现瓶颈,响应效率大大降低
  2. 为了减少网络传输延迟,提升响应效率
  3. 能够避免因为后端服务器出现异常以及网络故障,客户端请求数据副本能够及时响应
  • nginx的缓存机制
    proxy模块指令

    以上nginx配置结合使用:
http {...proxy_cache_path /cache/nginx levels=1:2 keys_zone=imooc_cache:10m max_size=5g inactive=60m use_temp_path=off;...server {...location /api/ {proxy_cache imooc_cache;proxy_pass 127.0.0.1:81/api/;proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;proxy_cache_key $host$uri$is_args$args;include proxy_params;}}
}

proxy_params文件的配置如下:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

访问一次页面,并向 http://192.168.148.168:8000/api/ 发起一个接口数据请求,查看/cache/nginx目录下的缓存结果:

[root@localhost 02]# cat 9563faff155b9fcfbf3fb1b16c253021
¿]n`ÿÿÿÿÿÿÿÿÿ´m`Džt>
KEY: 192.168.148.170/api/index.php
HTTP/1.1 200 OK
Date: Wed, 07 Apr 2021 13:34:55 GMT
Server: Apache/2.4.46 (Unix) PHP/7.4.16
X-Powered-By: PHP/7.4.16
Content-Length: 31
Connection: close
Content-Type: text/html; charset=UTF-8this is 192.168.148.170_php_new[root@localhost 02]# 

清除缓存

  • ngx_cache_purge是nginx的第三方模块,能够帮助我清除nginx中的缓存。

如果启动了缓存,没有安装这个模块(ngx_cache_purge),重启nginx会出现异常:

2021/04/18 10:15:36 [emerg] 12180#0: unknown directive “proxy_cache_purge” in /vhost/test_170.cc.conf:20

这个异常是在指示我们,找不到该指令的驱动,需要按照相关模块。

ngx_cache_purge只是nginx的第三方模块,并不是某个特殊的软件,所以我们需要对nginx重新进行编译,操作如下:

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/home/pcre-8.44 --with-zlib=/home/zlib-1.2.11 --with-openssl=/home/openssl-1.1.1g --add-module=/home/ngx_cache_purge-2.3make -j2make install
  • 配置nginx:
location ~ /clear_cache(.*) {allow   all;proxy_cache_purge imooc_cache $host$1$is_args$args;
}
  • 缓存清除测试
    访问:http://192.168.148.170:8000/clear_cache//api/index.php, 访问这个链接将会清除接口:http://192.168.148.170:8000//api/index.php 的缓存数据。
  1. 成功清除缓存返回结果如下

  2. 没有缓存返回结果如下

控制nginx缓存

  • proxy_no_cache
# set 指令为变量设置,proxy_no_cache参数中的值可以设置多个,但是多个值中,只要有一个是不为0的,就会通过缓存响应数据
server
{...location /api/ {set $a 0; #设置初始值if ( $request_uri ~ /api/noapi/(.*) ){set $a 1; #如果满足不缓存 设置为1}proxy_no_cache $a;//...}location ~ /clear_cache(.*) {allow   all;proxy_cache_purge imooc_cache $host$1$is_args$args;}
}

查看proxy_cache指令详解

nginx缓存以及清除缓存相关推荐

  1. 实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发

    文章目录 概述 接口层改造 CacheService接口 CacheService接口实现类 工具类中的方法 单元测试 Github地址 概述 设计如下: 在接口层传入缓存key的前缀,通过匹配的方式 ...

  2. php 微信怎么清除缓存,前端清除缓存方法(微信缓存引起的bug)

    bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...

  3. yarn设置缓存,清除缓存

    查看yarn全局缓存目录 yarn cache dir 清除缓存 yarn cache clean 设置缓存目录 yarn config set cache-folder <path># ...

  4. vue 页面保留缓存和清除缓存

    路由: routes: [{ path: '/page1', name: page1', component: page1', meta:{ keepAlive:true  //true是保存缓存,f ...

  5. ajax 自动清缓存,ajax 清除缓存

    $.ajax({ url : actionUrl , beforeSend :function(xmlHttp){  // deforeSend 是请求前清除缓存  ,如果没有缓存也不使用before ...

  6. C#数据 缓存,增加缓存和清除缓存

    C#数据缓存 1 引入缓存帮助类 public class CacheHelp{/// <summary>/// 缓存指定对象,设置缓存/// </summary>/// &l ...

  7. Nginx的Web缓存服务及清除缓存

    这一篇记录一下Nginx作为Web服务器缓存,减少对应用服务器请求次数 ,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟.多谢! Nginx作为Web缓存 ...

  8. nginx 没有cookie_Nginx 内容缓存及常见参数配置

    使用场景:项目的页面需要加载很多数据,也不是经常变化的,不涉及个性化定制,为每次请求去动态生成数据,性能比不上根据请求路由和参数缓存一下结果,使用 Nginx 缓存将大幅度提升请求速度. 基础 只需要 ...

  9. php 清除缓存的操作,PHP清除缓存的几种方法

    这篇文章主要介绍了PHP清除缓存的几种方法总结的相关资料,希望通过本文大家能够掌握清除缓存的方法,需要的朋友可以参考下 PHP清除缓存的几种方法总结 现在开发的项目是用tp3.1版本的,在开发过程中我 ...

  10. android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...

    本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...

最新文章

  1. RESTful风格及其SpringMVC实现
  2. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结
  3. java 跨域_springboot解决跨域CROS问题,用注解@CrossOrigin
  4. 金额转换,阿拉伯数字的金额转换成 面试编程题
  5. WP7之题样式与数据绑定
  6. 记录部署hue在k8s上
  7. win10如何改变鼠标的形状和颜色?
  8. 字符串匹配——BMH算法
  9. 摆脱剧荒!教你用 Python 一步步爬取豆瓣电影新榜单
  10. 图书期刊信息管理系统c语言,基于C语言的图书馆管理系统.doc
  11. c语言的字符型都有什么作用是什么,字符型数据是什么意思怎么理解
  12. mongodb分片集群数据库安全认证
  13. ios 获取是否静音模式_iOS 判断设备是否静音
  14. win10鼠标右边光圈一直闪烁,原因是
  15. CrownCAD三维CAD绘制四连杆机构的具体步骤
  16. 油猴脚本——极简化百度知道/经验
  17. python发送邮件廖雪峰_电子邮件
  18. 如何测试承载网——TFN TT60 综合网络测试仪
  19. 计算机应用基础上机指导 教材,普通高等院校计算机优质平台课系列教材:计算机应用基础上机指导...
  20. 前端页面div设计的css模板

热门文章

  1. 三端稳压管反向击穿情况及分析与防护措施
  2. Online Convex Making Gradient Descent Optimal for Strongly Convex Stochastic Optimization
  3. 计算机上机日志如何查找,如何查看金蝶KIS记账王上机日志
  4. 滴滴出行A/B测试城市运营分析
  5. Java 实现短信验证功能(个人测试,不需要项目上线,利用容联云)
  6. 4 errors and 0 warnings potentially fixable with the `--fix` option
  7. ts版操作localStorage和sessionStorage工具
  8. Silvaco TCAD LTPS双栅器件仿真收敛不了,有没有好的解决办法
  9. 时统ptp_IEEE1588 PTP对时系统原理及特点
  10. 华为鸿蒙 OS 尝鲜,跑了个 “hello world”!跑通后,我特么开始怀疑人生...