缓存的概念
缓存就是数据交换的缓冲区,被称作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 |
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
配置实例:
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块 |
zone_name:指定使用缓存区的名称
proxy_cache_key指令
该指令用设置web缓存的key值,nginx会根据key值MD5进行哈希存储缓存
语法 | proxy_cache_key key; |
---|---|
默认值 | proxy_cache_key $scheme$proxy_host$request_uri; |
位置 | http块,server块,location块 |
默认kye值为:请求的协议+代理主机+请求URI来作为key值
proxy_cache_valid指令
该指令用来对不同返回状态码的URL设置不同的缓存时间
语法 | |
---|---|
proxy_cache_min_uses指令
proxy_cache_methods指令
nginx缓存案例
nginx清除缓存
nginx设置资源不缓存
指令介绍
条件变量介绍
案例实现