nginx-nginx的缓存集成

缓存的概念

缓存就是数据交换的缓冲区,被称作cache,访用户想要获取数据时,就会先从缓存中去查询数据,如果缓存中有就会直接返回给用户,若果缓存中没有,则会发出请求从服务器中重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据,节省资源访问的时间

缓存的使用场景

场景 作用
OS磁盘缓存 减少磁盘机械操作
数据库缓存 减少文件系统的IO操作
应用程序缓存 减少对数据库的查询
Web服务器缓存 减少对应用服务器请求次数
浏览器缓存 减少与后台的交互次数
[缓存使用场景表]

缓存的优缺点

缓存的优点

提高性能

  • 缓存技术通过存储经常访问的数据,显著减少了访问原始数据源(如数据库或远程服务器)的次数,从而加快了数据访问速度。
  • 在Web应用中,缓存可以减少服务器响应时间,提高页面加载速度,提升用户体验。

减轻服务器负载

  • 通过将频繁请求的数据存储在缓存中,服务器可以减少处理请求的数量,从而降低负载。
  • 这有助于防止服务器过载,提高系统的稳定性和可靠性。

降低网络延迟

  • 缓存技术可以减少网络数据传输量,从而降低网络延迟。
  • 对于远程服务或分布式系统,缓存可以显著提高通信效率。

节省成本

  • 通过提高性能和减轻服务器负载,缓存技术可以延长硬件的使用寿命,减少升级和维护成本。
  • 在一些情况下,缓存还可以减少带宽费用,因为需要传输的数据量减少了。

缓存的缺点

数据一致性问题

  • 缓存中的数据可能与原始数据源不一致,特别是在数据频繁更新或删除的情况下。
  • 这可能导致用户看到过时或错误的信息。

缓存穿透

  • 如果缓存中没有存储某个请求所需的数据,并且该数据在原始数据源中也不存在,那么每次请求都会绕过缓存直接访问原始数据源,导致缓存失效。
  • 这可能发生在攻击者故意请求不存在的数据时,以绕过缓存并增加服务器的负载。

缓存雪崩

  • 如果缓存中的大量数据同时失效,那么大量请求将直接访问原始数据源,导致服务器负载急剧增加。
  • 这可能发生在缓存过期时间设置不当或缓存被恶意清空的情况下。

缓存预热

  • 在缓存初始化或重建时,需要将数据从原始数据源加载到缓存中。
  • 这可能需要一定的时间和资源,并且在这段时间内,系统的性能可能会受到影响。

复杂性增加

  • 引入缓存技术后,系统的设计和维护变得更加复杂。
  • 需要考虑缓存的更新策略、失效策略、数据一致性维护等问题。

资源消耗

  • 缓存需要占用一定的存储空间,并且可能需要额外的计算资源来管理缓存。
  • 在某些情况下,如果缓存配置不当,可能会导致资源浪费或性能下降。

nginx缓存指令

缓存指令是基于ngx_http_proxy_module模块相关指令集来进行完成的,遇到各种未知问题可以到官方文档进行查看

proxy_cache_path指令

该指令用于设置缓存的文件存放路径

| 语法 | proxy_cache_path path [levels=numbers] keys_zone=zone_name;zone_size[inactive=time][max_size=size]; |
| 默认值 | --- |

位置 http
[proxy_cache_path指令表]

path:缓存路径 如:/usr/local/proxy_cache

levels:指定该缓存空间对应的目录,最多可以设置为三层,每层取值为1|2 如:

levels=1:2 缓存空间有两层目录,第一层是1个字母,第二次是2个字母

举例说明:

monkey[key]通过MD5加密以后得值为 21eb8dc2babd4f6db0b3bef1923d7398

(可以使用md加密工具进行解析)

levels=1:2 最终的存储路径为:/usr/local/proxy_cache/8/39

levels=2:1:2 最终的存储路径为:/usr/local/proxy_cache/98/3/d7

levels=2:2:2 最终的存储路径为:/usr/local/proxy_cache/98/73/3d

keys_zone:用来为这个缓存区设置名称和大小,如

keys_zone=monkey:200m 缓存区的名称为monkey,大小为200M

inactive:指定缓存的数据多次时间未被访问就会被删除,如

inactive=1d 缓存数据在1天内没有被访问就会被删除

max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源,如

max_size=20g

配置实例:

bash 复制代码
proxy_cache_path /usr/local/proxy_cache levels=2:1 keys_zone=monkey:200m inactive=1d max_size=20g;

proxy_cache指令

该指令用来开启或者关闭代理缓存,如果是开启,则自定义使用哪个缓存区来进行缓存

| 语法 | proxy_cache zone_name;off; |
| 默认值 | proxy_cache off; |

位置 http块,server块,location块
[proxy_cache指令表]

zone_name:指定使用缓存区的名称

proxy_cache_key指令

该指令用设置web缓存的key值,nginx会根据key值MD5进行哈希存储缓存

| 语法 | proxy_cache_key key; |
| 默认值 | proxy_cache_key schemeproxy_host$request_uri; |

位置 http块,server块,location块
[proxy_cache_key指令表]

默认kye值为:请求的协议+代理主机+请求URI来作为key值

proxy_cache_valid指令

该指令用来对不同返回状态码的URL设置不同的缓存时间

| 语法 | |
| | |

[proxy_cache_valid指令表]

proxy_cache_min_uses指令

proxy_cache_methods指令

nginx缓存案例

nginx清除缓存

nginx设置资源不缓存

指令介绍

条件变量介绍

案例实现

相关推荐
你想考研啊9 分钟前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y1 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程1 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode2 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
Hello.Reader2 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
你想考研啊4 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks4 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体5 小时前
Linux快速入门
linux·运维
还是奇怪7 小时前
Linux - 安全排查 2
linux·运维·安全
牛奶咖啡137 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源