跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

php数据库怎么进连缓存数据库memcached_php连memcached法【步骤】

PHP 连 Memcached 需安装 memcached 扩展(非 memcache),依赖 libmemcached 库;Linux 用 apt 安装,macOS 用 brew + pecl,Windows 下载 dll;需启用 extension=memcached.so 并调用 addServer() 显式连接,key 必须为合法字符串,值默认序列化,注意超时、重试及缓存失效策略。 PHP 连 Memcached 需要装什么扩展 PHP 本身不自带 Memcached 客户端,必须安装
memcached
扩展(注意不是
memcache
,后者是旧版、功能更少)。它依赖系统级的 libmemcached 库,所以不能只用
pecl install memcache
混淆。 Linux(如 Ubuntu/Debian):
sudo apt install php-memcached
,然后确认
extension=memcached.so
在
php.ini
中已启用 mac OS(Homebrew):
brew install libmemcached
→
pecl install memcached
→ 检查
php.ini
是否加载了
extension=memcached.so
Windows:下载对应 PHP 版本和线程安全(TS/NTS)的
php_memcached.dll
,放进
ext/
目录并配置
php.ini
运行
php -m | grep memcached
或
phpinfo()
查看是否加载成功;若报
Class 'Memcached' not found
,说明扩展没启或版本不匹配 new Memcached() 后 connect 失败的常见原因
Memcached
构造后默认不自动连接,得显式调用
addServer()
或
addServers()
。直接
$m->set()
会静默失败,不报错但返回
false
,这是最容易踩的坑。 检查 Memcached 服务是否在运行:
systemctl status memcached
(Linux)或
brew services list | grep memcached
(macOS) 确认端口和地址正确:
addServer('127.0.0.1', 11211)
是默认组合;若改过配置(比如监听
0.0.0.0
或非 11211 端口),这里必须同步 防火墙 /SELinux 可能拦截本地连接,尤其 Docker 容器里连宿主机时,别用
localhost
(可能走 IPv6 或解析慢),改用
127.0.0.1
调用
getServerList()
和
getStats()
能快速验证连通性,比如:
var_dump($m->getServerList(), $m->getStats());
set() 和 get() 的 key 命名与序列化陷阱
Memcached::set()
默认对值做
serialize()
,但如果你之前用过
memcache
扩展或别的客户端,可能误设了
OPT_SERIALIZER
,导致取出来是乱码或
false
。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 key 必须是字符串,且不能含空格、控制字符、大括号等;建议用
md5()
或
sprintf('%s:%s', $prefix, $id)
规范化 避免直接存资源类型(如 MySQL result resource)、闭包、未序列化的对象;若需存对象,确保实现
__sleep()
/
__wakeup()
过期时间单位是秒(
0
表示永不过期,但实际受服务器最大 TTL 限制,通常 30 天);传入负数或字符串会静默失败 批量操作优先用
setMulti()
/
getMulti()
,比循环单条快得多,也减少网络往返 PHP-FPM 环境下连接复用与生命周期问题
Memcached
实例在 PHP-FPM worker 进程内是常驻的,但每次请求都是新实例——除非你手动持久化。盲目用
new Memcached()
在每次请求里创建,开销不大,但若频繁重建连接(比如没调
addServer
就 set),反而更慢。 立即学习 “ PHP免费学习笔记(深入) ”; 不要在函数里反复 new + addServer;建议封装成单例或通过 DI 容器管理,或至少把
addServer
提到初始化阶段 不推荐用
pconnect
(PHP 不支持 Memcached 的持久连接),所谓“长连接”靠的是 FPM worker 复用同一进程内的
Memcached
对象 注意
getResultCode()
和
getResultMessage()
,出错时不光看返回值,还得查这些,比如
getResultCode() === Memcached::RES_NOTFOUND
是 key 不存在,不是连接失败 线上环境务必加超时和重试逻辑,
setOptions(['MEMCACHED_OPT_CONNECT_TIMEOUT' => 1000])
控制毫秒级连接超时 Memcached 不是万能缓存层,它不支持复杂查询、没有事务、key 过期不可预测——用之前先想清楚:你要缓的是啥,失效策略怎么定,击穿/雪崩怎么防。这些不在扩展本身里,得靠代码逻辑兜底。

相关文章