keys_zone = myCache:8m是什么意思?
如文档所述,nginx的将保留所有活性键和信息有关的数据被存储在共享存储器区,其name
与size
由所述keys_zone参数进行配置。出于完整性考虑,让每个零件分解
/var/cache/nginx
是实际缓存存储的位置。在该文件夹内,缓存文件是二进制文件,但您可以轻松地在其中找到html标签。
levels=1:2
“ levels”参数设置高速缓存中子目录级别的数量。
keys_zone=myCache:8m
正在定义名为myCache的共享内存区域,最大大小为8 MB。它保存了缓存的所有活动密钥和元数据。因此,每当nginx检查页面是否被缓存时,它都会先查询共享内存区域,然后在/var/cache/nginx
缓存存在的情况下查找实际缓存的位置。
max_size
是缓存的最大大小,例如上的文件大小/var/cache/nginx
。
inactive=1h
指定可以存储的最大非活动时间缓存。在inactive
参数指定的时间内未访问的缓存数据将从缓存中删除,无论它们是否新鲜。
缓存验证和删除的工作方式
摘自Nginx邮件列表
据我了解,这里的伪代码nginx是如何工作的
当请求到来时
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
在其他过程中,缓存管理器执行此逻辑
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
如果proxy_cache_valid(12h)高于proxy_cache_path中指定的非活动值(1h),该怎么办?
只要请求并访问了特定的缓存,该缓存对象将一直有效到对象放入缓存后的12h。在那之后,缓存被认为是无效的,因此nginx将从后端获取并重置有效计时器。但是,如果对象处于非活动状态(未访问)超过一个小时(即使在12小时内,valid-cache-period),nginx也会由于参数而将其删除inactive
。
365d
而valid为1d
invalid ,那么即使没有人提出该请求,nginx也会在一年中每天获取缓存中的请求?