秒杀系统 | 多级查询缓存 | 基于 Nginx proxy_cache 模块的缓存实现

Nginx 的 proxy_cache 模块启用的前置条件

  • Nginx 必须作为反向代理使用;
  • 依靠文件系统存储索引级别的文件,本质上是将一个请求当做一个文件存储在本地,下一次请求过来,通过看本地有没有对应的文件,来决定 proxy cache 是否启用;
  • 依靠内存,缓存文件的地址,虽然缓存的内容是以文件的形式缓存在磁盘中,但缓存的 key 是存储在内存中,这个 key 在内存中的值就是缓存的内容的文件在文件系统中的地址;

开启 proxy_cache 的 Nginx 要做的配置

# 声明一个 cache 节点;
# levels=1:2 先将 URL 做一个哈希,取最后一位,作为文件的目录,再取一位,作为二级目录的索引,这样,所有
# 的缓存文件会分散到多个目录当中,减少寻址的消耗;
# keys_zone=tmp_cache:100m 给当前的缓存起个名字,起什么无所谓,内存大小 100M,用于存储缓存的 key;
# max_size=10g 磁盘总量超过 10g,采用 LRU 算法淘汰;
proxy_cache_path /home/lixinlei/application/openresty/nginx/temp_cache levels=1:2 keys_zone=tmp_cache:100m inactive=7d max_size=10g;

location / {
           proxy_pass http://backend_server;
           # 开启 proxy_cache,具体配置按照 tmp_cache 这个 keys_zone 中的设定配置;
           proxy_cache tmp_cache;
           # 以请求的 uri 作为缓存的 key;
           proxy_cache_key $uri;
           # 只对返回码为 200 206 304 302 响应的内容做缓存;
           proxy_cache_valid 200 206 304 302 7d;
           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_http_version 1.1;
           proxy_set_header Connection "";
}

开启 Nginx proxy_cache 后的性能提升

  • 吞吐量没有全部命中本地热点缓存的高,因为 Nginx 的 proxy_cache 把响应缓存到文件系统,在硬盘中,没在内存里;
  • 访问 Nginx 的本地磁盘尚且如此,访问远程 NAS 磁盘的性能更慢;
  • 所以 Nginx 的 proxy_cache 一般不开启;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值