centos缓存如何实现
小樊
45
2025-11-29 15:04:03
CentOS 缓存实现与配置指南
一 内核与系统级缓存
- 查看与理解:使用 free -h 观察 buff/cache 占用;vmstat -s | grep cache 查看内核统计;cat /proc/sys/vm/dirty_ratio、dirty_background_ratio、vfs_cache_pressure 了解脏页写回与 VFS 缓存回收倾向。一般无需手动“设定缓存大小”,内核会自动利用空闲内存做 Page Cache/Dentry/Inode 缓存。
- 调整思路(仅在确有需要时微调):
- 降低 vm.vfs_cache_pressure(如 50)可让内核更倾向保留 VFS 缓存;提高则更快回收。
- 适度降低 vm.dirty_ratio(如 10)与 vm.dirty_background_ratio(如 5)可加快脏页回写,减少突发写盘抖动。
- 持久化:编辑 /etc/sysctl.conf,如
vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5
执行 sysctl -p 生效。
- 清理缓存(仅用于测试或特殊维护):先 sync,再执行 echo 3 | sudo tee /proc/sys/vm/drop_caches(会清空页缓存、目录项与索引节点缓存,可能导致短时性能下降)。
二 Web 服务器与应用层缓存
- Nginx
- 反向代理/静态资源缓存:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
- 动态内容可结合 fastcgi_cache 缓存后端 PHP 响应。
- Apache
- 启用模块:安装 mod_cache、mod_cache_disk;在 /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/*.conf 中:
CacheRoot “/var/cache/apache2/mod_cache_disk”
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheIgnoreHeaders Set-Cookie
CacheDefaultExpire 3600
- 资源过期:启用 mod_expires,如
ExpiresActive On
ExpiresByType text/html “access plus 1 hour”
ExpiresByType text/css “access plus 1 week”
ExpiresByType application/javascript “access plus 1 week”
- PHP 运行缓存
- OPcache(推荐启用):在 /etc/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
- APCu(用户/页面级数据缓存):
[apcu]
extension=apcu.so
apcu.enable_cli=1
apcu.shm_size=32M
apcu.ttl=7200
- 对象/会话缓存
- Memcached:安装 memcached 与 php-pecl-memcached,在 php.ini 启用扩展并设置会话一致性等参数。
- Redis:安装 redis 与 php-redis,在应用或 Nginx(如 ngx_http_redis_module)中按需集成。
三 数据库缓存
- MySQL(传统部署)
- InnoDB 缓冲池(核心):如 innodb_buffer_pool_size=1G,innodb_buffer_pool_instances=8。
- 查询缓存(MySQL 5.7 及更早):如 query_cache_type=1、query_cache_size=64M;在 MySQL 8.0+ 已移除,建议以 InnoDB 缓冲池与应用层缓存为主。
- PostgreSQL
- 共享缓冲区:shared_buffers = 约 25% 内存;工作内存:work_mem = 4MB;维护工作内存:maintenance_work_mem = 512MB。
四 边缘与运维层缓存
- Varnish:高性能 HTTP 加速器/反向代理,安装后在 /etc/varnish/default.vcl 配置后端与缓存策略(如按 Cookie/Authorization 绕过缓存),可显著减轻源站压力。
- CDN:将静态资源与可缓存的页面分发至全球边缘节点,用户就近获取,降低源站带宽与时延。
- DNS 缓存:使用 nscd 缓存解析结果,编辑 /etc/nscd.conf(如 enable-cache hosts yes、positive-time-to-live hosts 3600),启动 systemctl start nscd && systemctl enable nscd。
五 监控与落地建议
- 观察与验证
- 系统层:用 free -h、vmstat -s 观察缓存命中与内存压力;必要时再微调 vfs_cache_pressure/dirty_ratio 等。
- Nginx:在响应头加入 X-Proxy-Cache $upstream_cache_status,用浏览器或 curl 验证 HIT/MISS。
- Varnish:在 vcl_deliver 中设置 X-Cache: HIT/MISS 便于观测。
- 实施顺序(由近到远、由低成本到高成本)
- 开启 内核 Page Cache 与合理的 脏页写回;2) 启用 OPcache/APCu;3) 配置 Nginx/Apache 页面与代理缓存;4) 引入 Redis/Memcached 做数据/会话缓存;5) 前端接入 CDN;6) 高并发场景前置 Varnish。
- 注意事项
- 缓存不等于持久化:变更数据需设置合适 TTL 与 Cache-Control/ETag,并在应用层处理缓存失效。
- 避免缓存穿透/雪崩:对热点数据设置 永不过期策略+主动刷新,对互斥资源加锁或随机过期。
- 调整 内核参数 与 数据库缓冲池 需结合实例内存与业务负载,变更前做好备份与回滚方案。