Nginx作为反向代理和静态资源服务器,其缓存配置能有效减少后端请求,提升响应速度。
expires指令设置过期时间(如expires 30d),并添加Cache-Control: public, no-transform头,让浏览器和CDN直接缓存,避免重复请求。proxy_cache_path定义缓存路径(如/var/cache/nginx)、层级(levels=1:2)、共享内存区域(keys_zone=my_cache:10m)及最大大小(max_size=1g);通过proxy_cache指令启用缓存,proxy_cache_valid设置不同状态码的缓存时间(如200 302 10m、404 1m),并添加add_header X-Proxy-Cache $upstream_cache_status监控缓存命中状态(HIT/MISS)。fastcgi_cache_path配置缓存路径,fastcgi_cache指令启用缓存,fastcgi_cache_valid设置缓存时间(如PHP页面缓存10分钟),减少PHP-FPM的重复解析和数据库查询。PHP脚本的编译和执行是动态请求的性能瓶颈,缓存编译结果和常用数据能显著提升效率。
opcache.enable=1开启,设置opcache.memory_consumption(如128MB,根据脚本大小调整)、opcache.max_accelerated_files(如4000,覆盖项目所有PHP文件)、opcache.revalidate_freq(如60秒,代码更新后自动失效),缓存编译后的字节码,避免重复编译。apcu.enable_cli=1开启,设置apcu.shm_size(如32MB,根据缓存数据量调整),使用apcu_store()和apcu_fetch()存储和获取数据。php-memcached或php-redis扩展连接,将频繁访问的数据存储在内存中,减少数据库压力。MySQL的缓存配置直接影响数据库查询性能,需结合InnoDB特性和外部缓存优化。
innodb_buffer_pool_size是核心参数,设置为物理内存的60%-80%(如64GB内存设为32GB-51.2GB),缓存数据和索引页,减少磁盘I/O。query_cache_type=0),因其在高并发下易成为瓶颈,建议用Redis/Memcached替代。Predis、phpredis)操作,减少直接访问MySQL的次数。应用层缓存能针对业务场景优化,提升数据访问效率。
Cache-Control(如public, max-age=31536000)和Expires头,让浏览器缓存静态资源,避免重复下载,提升页面加载速度。缓存一致性是保证数据准确性的关键,需根据业务场景选择合适的策略。
apcu_delete()、Redis->del()),确保下次请求获取最新数据。product_123_v2),更新数据时递增版本号,使缓存自动失效,避免脏数据。持续监控缓存性能,根据实际情况调整策略。
$upstream_cache_status、Redis的INFO stats、APCu的apcu_cache_info()监控命中率(如Nginx缓存命中率应保持在80%以上),若命中率低,需调整缓存时间或大小。used_memory),避免内存溢出;调整maxmemory策略(如allkeys-lru),淘汰不常用的缓存数据。slow_query_log分析慢查询,优化SQL语句(如添加索引、避免SELECT *),减少数据库压力,降低缓存失效频率。