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_sizeinactive=timemax_size=size; |
| 默认值 | --- |

位置 http
[proxy_cache_path指令表]

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

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

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

举例说明:

monkeykey通过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设置资源不缓存

指令介绍

条件变量介绍

案例实现

相关推荐
杨云龙UP1 天前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
梦帮科技1 天前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
逐流人1 天前
Ceph分布式存储集群配置与池管理:从配置优先级到PG、复本池与纠删码池
运维·分布式·ceph·云原生·云计算·rados
海宇服务1 天前
零信任架构实战:基于海宇车型识别精准构建自动化定损网关
运维·人工智能·架构·自动化
Fcy6481 天前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
wefg11 天前
【Redis】初识 Redis
数据库·redis·缓存
g10565591391 天前
公有云_云运维服务
java·运维·服务器
well06121 天前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
hzxpaipai1 天前
杭州企业官网怎么建设?从策划到上线的5步建站方法
运维·服务器·前端·网络
哲霖软件1 天前
非标机械设备公司怎么做信息化?破解通用ERP水土不服难题
大数据·运维