LNMP环境下缓存技术应用
导读:LNMP缓存技术全景与落地方案 一、分层缓存架构与适用场景 浏览器与CDN层:对图片、CSS、JS等静态资源设置长Cache-Control/Expires,结合CDN边缘缓存,显著降低源站压力与跨网时延。 Nginx层: 反向代理/负...
LNMP缓存技术全景与落地方案
一、分层缓存架构与适用场景
- 浏览器与CDN层:对图片、CSS、JS等静态资源设置长Cache-Control/Expires,结合CDN边缘缓存,显著降低源站压力与跨网时延。
- Nginx层:
- 反向代理/负载均衡场景用proxy_cache缓存后端动态页面或整页输出。
- 直连PHP-FPM场景用fastcgi_cache缓存PHP处理结果,减少FPM与数据库压力。
- 应用层(PHP):
- OPcache缓存字节码,提升脚本执行效率。
- APCu缓存用户态数据(如配置、计算结果)。
- Redis/Memcached做对象/页面片段/会话与通用键值缓存。
- 数据库层(MySQL):优先优化InnoDB缓冲池等内存结构;注意MySQL 8.0已移除查询缓存,不建议依赖。
- 可选前置层:Varnish作为HTTP加速器,适合高命中率的内容型站点。
二、关键配置示例
- Nginx FastCGI缓存(适合PHP-FPM直连)
http { fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_fcgi_cache:10m max_size=1g inactive=60m use_temp_path=off; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_cache my_fcgi_cache; fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m; add_header X-FastCGI-Cache $upstream_cache_status; } } } - Nginx静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; } - PHP OPcache(php.ini)
[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 - PHP APCu(用户缓存)
[apcu] apcu.enable=1 apcu.shm_size=64M apcu.ttl=7200 - Redis/Memcached安装与PHP扩展(Debian/Ubuntu示例)
以上示例涵盖proxy_cache/fastcgi_cache路径与头部、静态资源过期、OPcache/APCu关键参数及Redis/Memcached安装扩展步骤。# Redis sudo apt install redis-server php-redis # Memcached sudo apt install memcached php-memcached
三、缓存策略与一致性设计
- 分层与键设计:按“浏览器/CDN → Nginx → PHP → Redis/Memcached → DB”逐层降级;键名包含业务前缀+版本/环境+URI/参数哈希,避免冲突与雪崩。
- 失效与更新:
- 写操作时采用Cache-Aside策略:先更新数据库,再删除/失效对应缓存;读取时Cache-Through按需回填。
- 对列表/聚合结果设置短TTL与主动失效,避免脏读。
- 穿透/击穿/雪崩应对:
- 穿透:对空结果也短时缓存;参数校验与布隆过滤器减少无效查询。
- 击穿:热点键使用互斥锁/分布式锁或永不过期+后台异步刷新。
- 雪崩:为缓存设置随机过期抖动与多副本。
- 会话存储:优先Redis(支持持久化、丰富数据结构与TTL),高并发下可结合Memcached做分片。
- 版本化与灰度:通过URL/参数版本或标签实现灰度与快速回滚。
四、监控、验证与运维要点
- 命中率与有效性:
- Nginx:响应头X-Proxy-Cache/X-FastCGI-Cache查看命中(HIT/MISS/BYPASS)。
- Redis/Memcached:使用redis-cli info/monitor或memcached-tool观察命中率、内存与连接数。
- 容量与清理:定期清理**/var/cache/nginx等缓存目录,监控max_size/inactive**与对象数量,避免磁盘/内存膨胀。
- 数据库优化:优先调大innodb_buffer_pool_size(如物理内存的50%–80%区间视负载而定),并关注table_open_cache等结构缓存。
- 安全与网络:限制Redis/Memcached监听地址与访问网段,启用密码/ACL与最小权限;必要时启用TLS与内网隔离。
五、选型建议与注意事项
- 场景匹配:
- 纯静态资源:优先CDN + 浏览器缓存。
- 动态页面:优先Nginx FastCGI/Proxy缓存,再配合Redis/Memcached做数据层缓存。
- 计算/配置/字典:用APCu(进程内共享,低延迟)。
- 会话/队列/分布式锁:用Redis。
- 版本差异:MySQL 8.0移除查询缓存,不要在新项目中使用;对读多写少场景以InnoDB缓冲池与索引优化为主。
- 模块与发行版:部分发行版需安装nginx-extras或相应模块包(如proxy_cache_path/fastcgi_cache_path所在模块);部署前确认模块可用性。
- 调参顺序:先定命中率与延迟目标,再调整keys_zone大小、max_size、inactive、TTL与并发连接,最后做压测与容量规划。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP环境下缓存技术应用
本文地址: https://pptw.com/jishu/763230.html
