如何利用ubuntu缓存加速应用
小樊
31
2025-12-10 05:36:50
Ubuntu 缓存加速应用的实用方案
一 应用层缓存
- Redis:适合做对象缓存、会话存储与通用键值缓存。安装与启用:sudo apt-get install redis-server,启动:sudo systemctl start redis-server && sudo systemctl enable redis-server。在 PHP 中使用:安装扩展 sudo apt-get install php-redis,在代码里连接 127.0.0.1:6379 进行 set/get 缓存。
- Memcached:面向高性能分布式对象缓存,常用于减轻数据库压力。安装与启用:sudo apt-get install memcached,配置 /etc/memcached.conf(如内存 -m 1024),重启服务;在 PHP 中安装 php-memcached 扩展并使用。
- HTTP 层缓存:在 Nginx 侧启用反向代理缓存,示例:在 http 块配置 proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;在 server/location 中使用 proxy_cache my_cache; proxy_cache_valid 200 1h; 实现页面与接口结果的二级加速。
- PHP 运行缓存:启用 OPcache(PHP 5.5+ 内置),在对应 php.ini(如 /etc/php/7.x/fpm/php.ini 或 /etc/php/7.x/apache2/php.ini)中设置:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
修改后重启 Apache 或 PHP-FPM。
- Varnish:专业的 HTTP 反向代理缓存,适合全页或片段缓存。安装:sudo apt-get install varnish;默认监听 6081,将后端设为应用端口(如 8080),在 /etc/varnish/default.vcl 中配置 backend 与缓存规则,然后重启服务。
二 数据与编译缓存
- 数据库查询结果缓存:将热点数据放入 Redis/Memcached,对高并发读场景(如首页、配置、字典)设置合理 TTL,对强一致的数据(如价格、库存)缩短或禁用缓存,并在写入时主动 delete/invalidate 相关键。
- 编译缓存:使用 ccache 或 sccache 缓存编译产物,显著加速 C/C++/Rust 等项目的重复构建。
- 包管理缓存:定期清理无用包文件,释放磁盘并保持系统整洁:sudo apt-get autoclean、sudo apt-get clean、sudo apt autoremove。
三 系统与网络层缓存
- DNS 缓存:部署 dnsmasq 提供本地解析缓存,配置 cache-mem 512 并重启服务,降低 DNS 往返时间;需要时可用 sudo systemd-resolve --flush-caches 刷新解析缓存。
- 内核与 I/O:适度降低 vm.swappiness(如设为 10)以减少换页;为 SSD 选择更合适的 I/O 调度器(如 noop 或 deadline),提升磁盘访问效率。
- 文件系统缓存:**Linux 页缓存(Page Cache)**会自动缓存频繁访问的文件数据,通常无需手动清理;仅在特殊场景(如基准测试)下才使用 sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 释放缓存。
- 浏览器与 CDN:为静态资源设置 Cache-Control: max-age=31536000 等强缓存头;使用 CDN 分发静态资源,并优先选择支持 Brotli 压缩(相较 Gzip 体积可再降约 20%)的厂商,进一步缩短用户首包时间。
四 落地配置示例
- Nginx + Redis 二级缓存(面向 API/页面)
- 安装组件:sudo apt-get install nginx redis-server php-redis;
- 配置 Nginx:
- 在 http 块加入:
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
- 在 server/location 加入:
proxy_cache my_cache; proxy_cache_valid 200 1h; proxy_pass http://127.0.0.1:8080;
- 在应用(如 PHP)中对热点数据写入 Redis,设置 TTL;
- 重启 Nginx 与 PHP-FPM,通过浏览器与日志验证命中率与响应时间。
- PHP 应用层加速(OPcache + Redis/Memcached)
- 启用 OPcache(见上文关键参数);
- 安装并启用 Redis/Memcached 扩展;
- 在业务代码中对数据库查询结果、页面片段、会话等进行 TTL 缓存与主动失效;
- 重启 Apache/PHP-FPM 并压测对比 QPS 与 P95 延迟。
五 监控与注意事项
- 监控与调优:使用 top/htop、vmstat、iostat 观察 CPU、内存、I/O 与缓存命中情况;根据瓶颈调整 Redis/Memcached 内存、连接数、键过期策略与 Nginx 缓存路径/大小。
- 缓存策略:遵循 Cache-Aside 模式,写穿/失效策略要覆盖“更新即失效”的场景;对强一致数据使用短 TTL 或旁路缓存。
- 变更与回滚:上线缓存策略时灰度发布,保留“跳过缓存”的应急开关,便于快速回滚。
- 风险提示:修改 sysctl/vm.drop_caches 与 I/O 调度器前请评估业务影响并做好备份;生产环境不建议频繁清理 Page Cache。