温馨提示×

LNMP架构下缓存策略探讨

小樊
65
2025-08-17 05:01:00
栏目: 编程语言

LNMP架构下缓存策略可从Nginx、PHP、MySQL及辅助组件多层面优化,以下是关键策略及配置要点:

一、Nginx缓存

  • 静态文件缓存:通过expires指令设置浏览器缓存时间,减少重复请求。
    location ~* \.(jpg|css|js)$ { expires 30d; access_log off; } 
  • 代理缓存:缓存后端PHP-FPM响应,配置proxy_cache_path定义缓存路径,proxy_cache_valid设置不同状态码缓存时间。
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g; location / { proxy_cache my_cache; proxy_cache_valid 200 10m; } 
  • FastCGI缓存:针对PHP脚本缓存,需配合fastcgi_cache模块,设置缓存路径及过期策略。
    fastcgi_cache_path /var/cache/nginx/php levels=1:2 keys_zone=php_cache:10m; location ~ \.php$ { fastcgi_cache php_cache; fastcgi_cache_valid 200 5m; } 

二、PHP缓存

  • OPcache:缓存PHP字节码,减少脚本编译开销,需在php.ini中启用。
    opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000 
  • 内存缓存(Redis/Memcached):存储动态数据(如用户会话、热门查询),需安装客户端库并集成到PHP代码。
    // Redis示例 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $data = $redis->get('cached_key') ?: fetchFromDB(); 

三、MySQL缓存

  • InnoDB缓冲池:缓存数据和索引页,参数innodb_buffer_pool_size建议设置为物理内存的60%-80%。
    [mysqld] innodb_buffer_pool_size=4G 
  • 查询缓存(MySQL 5.7及以下):缓存SELECT结果,但MySQL 8.0已移除,建议用Redis替代。

四、辅助缓存策略

  • CDN加速:缓存静态资源到边缘节点,降低服务器负载,配置Nginx反向代理至CDN。
  • HTTP/2:启用多路复用和头部压缩,提升传输效率(需Nginx支持)。
    listen 443 ssl http2; 
  • 缓存更新机制:通过设置合理的过期时间(TTL)或使用缓存标签(Cache Tags)实现数据一致性。

五、注意事项

  • 缓存击穿/雪崩:为热点数据设置互斥锁或随机过期时间,避免大量请求穿透缓存。
  • 监控与清理:定期清理过期缓存,监控缓存命中率(如Nginx的$upstream_cache_status)。

通过组合上述策略,可显著提升LNMP架构的响应速度和并发能力,降低后端负载。

0