成功安装Memcache并使其稳定运行的核心在于:必须严格区分Memcached服务端与PHP客户端扩展,并确保系统环境依赖库的完整性与版本匹配。整个安装过程实际上是一个“先搭建服务守护进程,后配置语言解析接口”的双向部署过程,任何一端的缺失或配置错误都会导致缓存服务不可用,对于追求高性能的Web应用而言,Memcache作为内存对象缓存系统,能够显著减轻数据库负载,其安装质量直接决定了后期的缓存命中率和响应速度。

环境准备与依赖库部署
在执行具体的{安装memcache_安装}操作前,构建一个纯净且依赖完备的运行环境是首要前提,Memcache的核心依赖于libevent库,这是一个异步事件通知库,若系统缺失该组件,服务端将无法正常编译或启动。
-
系统环境更新
建议在安装前更新系统软件包列表,确保获取最新的安全补丁,对于CentOS系统,执行yum update;对于Ubuntu/Debian系统,执行apt-get update。 -
安装Libevent依赖
Libevent是Memcached运行的基石。- 对于CentOS/RHEL系,执行:
yum install libevent libevent-devel -y。 - 对于Ubuntu/Debian系,执行:
apt-get install libevent-dev -y。
务必确认devel开发包已安装,否则在编译源码时会报错。
- 对于CentOS/RHEL系,执行:
-
检查编译工具
确保系统安装了gcc、make等编译工具,执行yum groupinstall "Development Tools" -y可以一次性解决编译环境缺失问题。
Memcached服务端安装与启动
服务端是真正存储缓存数据的“容器”,这是安装流程中的核心组件,生产环境建议采用源码编译安装,以便进行定制化参数配置。
-
获取源码包
从官方网站下载稳定版本的Memcached源码包(如memcached-1.6.x.tar.gz),使用wget命令下载后,通过tar -zxvf命令解压。 -
编译与安装
进入解压后的目录,执行标准的“三步走”编译流程:./configure --prefix=/usr/local/memcached:指定安装路径,便于后续管理。make:编译源代码。make install:将编译好的二进制文件安装到系统目录。
-
启动Memcached服务
安装完成后,需要手动启动守护进程,一个专业的启动命令示例如下:/usr/local/memcached/bin/memcached -d -m 1024 -u root -p 11211 -c 1024 -P /tmp/memcached.pid
- -d:以守护进程(后台)模式运行。
- -m:分配1024MB内存给缓存使用。
- -p:指定监听端口,默认为11211。
- -u:指定运行用户,建议使用非root用户以提升安全性。
启动后,可通过
ps -ef | grep memcached命令验证进程是否存在。这是确认服务端安装成功的唯一标准。
PHP客户端扩展配置
仅有服务端是无法让PHP代码调用缓存的,必须安装PHP的Memcache扩展,这里存在一个常见的技术误区:PHP有两个扩展,分别是memcache(旧版,不再维护)和memcached(新版,功能更强)。强烈建议安装memcached扩展,因为它支持更多高级特性如CAS操作。
-
安装扩展依赖
memcached扩展依赖于libmemcached库,需先安装该库:yum install libmemcached libmemcached-devel -y -
编译PHP扩展
使用phpize命令动态编译扩展。- 下载扩展源码并解压。
- 在目录中执行
phpize。 - 执行
./configure --with-php-config=/path/to/php-config --disable-memcached-sasl(关闭SASL认证可避免部分连接错误)。 - 执行
make && make install。
-
修改php.ini配置
编译成功后,需在php.ini文件中添加扩展引用。- 添加行:
extension=memcached.so。 - 保存后,重启PHP-FPM服务(如
systemctl restart php-fpm)。
- 添加行:
-
验证安装结果
创建一个PHP测试页面,访问该页面并搜索“memcached”,若能看到Memcached的版本号及配置信息,则证明客户端与服务端已成功打通。
常见问题排查与优化建议
在完成了基础的{安装memcache_安装}流程后,生产环境的稳定性往往取决于细节配置。
-
防火墙端口放行
Memcached默认监听11211端口,若Web服务器与缓存服务器分离部署,必须在防火墙中放行该端口。
- 执行:
firewall-cmd --zone=public --add-port=11211/tcp --permanent。 - 执行:
firewall-cmd --reload。
切记不要将端口暴露在公网,应严格限制来源IP,防止未授权访问导致数据泄露。
- 执行:
-
内存分配策略优化
Memcached采用Slab Allocation机制管理内存,启动时可通过-f参数调整Growth Factor(增长因子),以减少内存碎片,如果缓存对象大小差异较大,建议将因子设置为1.25或更高,以优化内存利用率。 -
监控与日志
默认情况下Memcached不记录详细日志,建议通过-vv参数启动(仅用于调试)或使用第三方监控工具(如MemAdmin、Prometheus exporter)实时监控缓存命中率。高命中率是安装配置成功的最终验证指标。
相关问答
安装完成后,PHP连接Memcached提示“Connection refused”怎么办?
解答:这通常由两个原因导致,检查Memcached服务端是否正常启动,使用netstat -lntp | grep 11211查看端口是否被监听,检查防火墙设置,确保PHP所在的服务器IP被允许访问Memcached服务器的11211端口,若服务端启动时绑定了特定的IP(如内网IP),需确保连接地址配置正确,而非使用localhost。
Memcached和Memcache扩展有什么区别,安装时应该选哪个?
解答:Memcache是PHP早期的扩展,不支持二进制协议,功能较少且已停止维护;Memcached是新版扩展,基于libmemcached开发,支持二进制协议、延迟删除、CAS令牌等高级功能。在安装时,应毫不犹豫地选择Memcached扩展,这能提供更好的性能和更丰富的API支持,避免在高并发场景下出现数据一致性问题。
如果您在安装过程中遇到了其他棘手的问题,或者有独到的优化参数配置经验,欢迎在评论区留言交流。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/121901.html