Redis是高性能键值存储系统,常用于缓存数据库热点数据,减少MySQL等后端数据库的压力。
操作步骤:
yum install -y gcc make
安装依赖,下载并编译Redis源码(如wget http://download.redis.io/releases/redis-6.2.6.tar.gz
,tar xzf redis-6.2.6.tar.gz
,cd redis-6.2.6 && make && sudo make install
)。/etc/redis/redis.conf
,设置bind 0.0.0.0
(允许远程访问)、daemonize yes
(后台运行)、requirepass yourpassword
(设置访问密码)。phpredis
、Python的redis-py
)连接Redis,将高频查询结果(如商品分类、用户会话)存储为键值对,设置合理过期时间(如EXPIRE key 3600
表示1小时后自动删除)。Nginx可作为反向代理服务器,缓存后端应用(如PHP、Java)的响应结果,避免重复请求穿透到后端。
操作步骤:
/etc/nginx/nginx.conf
,添加proxy_cache_path
指令定义缓存目录和参数(如proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off
,表示缓存目录为/var/cache/nginx
,键区域my_cache
大小为10MB,最大缓存1GB,60分钟未访问则失效)。server
或location
块中添加proxy_cache my_cache
(启用缓存)、proxy_cache_valid 200 302 30m
(200/302状态码缓存30分钟)、add_header X-Proxy-Cache $upstream_cache_status
(返回缓存状态,HIT/MISS/EXPIRED)。Varnish是专门的HTTP缓存服务器,擅长缓存动态内容(如PHP、Python生成的页面),提升高并发场景下的响应速度。
操作步骤:
yum install -y varnish
安装,默认监听80端口(需调整Nginx/Apache端口为8080)。/etc/varnish/default.vcl
,设置后端服务器(backend default { .host = "127.0.0.1"; .port = "8080"; }
)、缓存逻辑(如sub vcl_backend_response { if (beresp.http.Cache-Control ~ "no-cache") { set beresp.uncacheable = true; } }
,避免缓存动态内容)。systemctl start varnish
和systemctl enable varnish
,通过varnishstat
命令监控缓存命中率(cache_hit
/cache_miss
)。CentOS系统内核提供多种缓存机制(如页缓存、目录项缓存),通过调整内核参数可优化缓存使用效率。
关键操作:
vm.swappiness
:该参数控制内核使用交换分区(Swap)的倾向(0-100,值越低越倾向于使用物理内存)。编辑/etc/sysctl.conf
,添加vm.swappiness=10
(减少Swap使用,避免磁盘I/O瓶颈),执行sysctl -p
生效。vm.dirty_ratio
(脏页占内存的最大比例,默认40%)和vm.dirty_background_ratio
(后台写回脏页的阈值,默认10%)。调整为vm.dirty_ratio=40
、vm.dirty_background_ratio=10
,平衡内存利用率与磁盘写入性能。noatime
挂载:编辑/etc/fstab
,为根分区添加noatime
选项(如/dev/sda1 / ext4 defaults,noatime 1 1
),减少文件访问时间戳的更新,降低磁盘I/O。swappiness
后,Swap使用率从15%降至2%,内存利用率提升10%;调整脏页参数后,数据库写入延迟从5ms降低至2ms。定期清理应用层缓存(如YUM/DNF、Nginx、MySQL)可避免缓存占用过多资源,影响系统性能。
常见清理操作:
sudo yum clean all
(CentOS 7及以下)或sudo dnf clean all
(CentOS 8及以上),删除已下载的软件包缓存。/var/cache/nginx
目录下的缓存文件(sudo rm -rf /var/cache/nginx/*
),释放磁盘空间。sudo systemctl stop mysqld
),删除/var/lib/mysql
目录下的缓存文件(如ib_logfile*
),重启服务(sudo systemctl start mysqld
)。cleanCache.sh
),包含sync
(同步内存到磁盘)、echo 3 > /proc/sys/vm/drop_caches
(清理所有缓存),添加到crontab(0 */2 * * * /path/to/cleanCache.sh
),每2小时自动执行。