You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Node.js无法通过Unix Socket连接Memcached服务器如何解决

解决Node.js通过Unix Socket连接Memcached的问题

我之前也踩过这个坑,给你几个实用的排查和解决步骤:

1. 检查Unix Socket的权限

Node.js进程可能没有访问/var/run/memcached/memcached.sock的权限,这是最常见的原因。

  • 先查看Socket文件的权限信息:
    ls -l /var/run/memcached/memcached.sock
    
  • 如果文件所属用户/组不是Node进程运行的用户,你可以临时调整权限测试(生产环境不建议用777,最好将Node用户加入memcached组):
    sudo chmod 777 /var/run/memcached/memcached.sock
    

2. 确认Memcached是否监听了该Socket

确保Memcached服务确实在使用这个Socket监听连接:

  • 用netstat或ss命令检查:
    netstat -a | grep memcached
    # 或者
    ss -a | grep memcached
    

如果看不到/var/run/memcached/memcached.sock的监听记录,说明Memcached没配置使用这个Socket。

3. 验证Memcached的配置

打开Memcached的配置文件(通常在/etc/memcached.conf或/etc/sysconfig/memcached),确认存在以下配置项:

# 指定Unix Socket路径
-s /var/run/memcached/memcached.sock
# 设置Socket的权限,允许所属组访问
-a 0770

修改配置后重启Memcached服务:

sudo systemctl restart memcached

4. 检查Memcached客户端的连接格式

部分旧版本的memcached模块要求Unix Socket路径前加上unix://前缀,试试修改连接代码:

var Memcached = require('memcached');
// 添加unix://前缀
var mem = new Memcached('unix:///var/run/memcached/memcached.sock');

mem.set('ping', 'Hello World', 60, function (err) {
  if (err) {
    console.error('Set操作失败:', err); // 一定要打印错误信息!
    return;
  }
  mem.get('ping', function (err, data) {
    if (err) {
      console.error('Get操作失败:', err);
      return;
    }
    console.log(data);
  });
});

5. 更新Memcached客户端模块

旧版本的memcached包可能存在Unix Socket的兼容性问题,更新到最新版试试:

npm update memcached

6. 打印错误信息排查

你的原始代码没有处理错误回调,这会让你完全不知道问题出在哪。一定要在回调中打印err,这样能直接看到具体错误(比如权限拒绝、连接超时等),快速定位问题。

内容的提问来源于stack exchange,提问作者Temürjin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:20