温馨提示×

centos缓存如何实现

小樊
45
2025-11-29 15:04:03
栏目: 智能运维

CentOS 缓存实现与配置指南

一 内核与系统级缓存

  • 查看与理解:使用 free -h 观察 buff/cache 占用;vmstat -s | grep cache 查看内核统计;cat /proc/sys/vm/dirty_ratiodirty_background_ratiovfs_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:安装 memcachedphp-pecl-memcached,在 php.ini 启用扩展并设置会话一致性等参数。
    • Redis:安装 redisphp-redis,在应用或 Nginx(如 ngx_http_redis_module)中按需集成。

三 数据库缓存

  • MySQL(传统部署)
    • InnoDB 缓冲池(核心):如 innodb_buffer_pool_size=1Ginnodb_buffer_pool_instances=8
    • 查询缓存(MySQL 5.7 及更早):如 query_cache_type=1query_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 yespositive-time-to-live hosts 3600),启动 systemctl start nscd && systemctl enable nscd

五 监控与落地建议

  • 观察与验证
    • 系统层:用 free -hvmstat -s 观察缓存命中与内存压力;必要时再微调 vfs_cache_pressure/dirty_ratio 等。
    • Nginx:在响应头加入 X-Proxy-Cache $upstream_cache_status,用浏览器或 curl 验证 HIT/MISS
    • Varnish:在 vcl_deliver 中设置 X-Cache: HIT/MISS 便于观测。
  • 实施顺序(由近到远、由低成本到高成本)
    1. 开启 内核 Page Cache 与合理的 脏页写回;2) 启用 OPcache/APCu;3) 配置 Nginx/Apache 页面与代理缓存;4) 引入 Redis/Memcached 做数据/会话缓存;5) 前端接入 CDN;6) 高并发场景前置 Varnish
  • 注意事项
    • 缓存不等于持久化:变更数据需设置合适 TTLCache-Control/ETag,并在应用层处理缓存失效。
    • 避免缓存穿透/雪崩:对热点数据设置 永不过期策略+主动刷新,对互斥资源加锁或随机过期。
    • 调整 内核参数数据库缓冲池 需结合实例内存与业务负载,变更前做好备份与回滚方案。

0