我已经安装了 memcached,当我尝试像这样的脚本测试时:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
echo $memcache->getVersion();
我收到了嵌套错误:
:通知:MemcachePool::getversion():服务器 127.0.0.1(tcp 11211,udp 0)失败,原因:网络超时(0)位于 /var/www/html/admin/test.php 第 62 行
可能是什么问题?我是 memcached 的新手。
答案1
验证收听
以 root 身份运行lsof -i
并确认 memcache 守护程序正在您列出的端口上运行。
格式化以便合理:
memcached 16526 corneliu 31u IPv4 207975 0t0 TCP *:memcache (LISTEN)
memcached 16526 corneliu 32u IPv6 207976 0t0 TCP *:memcache (LISTEN)
memcached 16526 corneliu 33u IPv4 207979 0t0 UDP *:memcache
memcached 16526 corneliu 34u IPv6 207980 0t0 UDP *:memcache
因此,memcache 服务器正在侦听 TCP 和 UDP 上的 IPv4 和 IPv6。我假设 memcache 的 /etc/services 条目是端口 11211。服务正在侦听。
手动验证服务器是否响应命令
我会参考这个问题:https://stackoverflow.com/questions/6045187/memcache-connects-but-doesnt-respond-to-any-command并验证服务器是否响应您通过 telnet 或 netcat 发送的命令。如果您运行 tcpdump 或 wireshark 来捕获网络流量并实际查看正在传输的数据包,这可能也会非常有帮助。
首先在不更改内存缓存配置的情况下进行调试。尝试根据上述问题更改服务器的绑定地址应该是您要做的最后一件事。让我知道您的进展。
答案2
许多人使用 pconnect 代替 connect 取得了良好的效果
$memcache = new Memcache;
$memcache->pconnect('127.0.0.1', 11211);
echo $memcache->getVersion();
更多信息请点击此处 http://hostingfu.com/article/memcachepoolget-server-failed-with-network-timeout-possible-fixes
答案3
只需在终端中使用此命令即可启动 memcache 守护进程
memcached -d -m 512 -l 127.0.0.1 -p 11211 -u nobody
在哪里
-m
对于记忆,-p
对于港口,-l
对于服务器的 IP 地址,-u
对于用户