memcached不是数据库,而是纯内存键值缓存,不持久化、无查询语言、无事务和acid;libevent缺失或配置文件空格、引号、大小写错误等均会导致启动失败。

memcached 不是数据库,它不持久化、不支持查询语言、没有事务和 ACID,只是纯内存键值缓存。装错认知,后续配置和运维全会跑偏。
libevent 缺失会导致 memcached 启动直接失败
错误现象:error while loading shared libraries: libevent-2.1.so.7: cannot open shared object file ——这不是配置问题,是根本没加载起来。
验证是否已安装:
- Ubuntu/Debian:
dpkg -l | grep libevent,若无输出或只有libevent-1.4,执行sudo apt install -y libevent-dev - CentOS/RHEL 8+:
dnf list installed | grep libevent,缺失则运行sudo dnf install -y libevent libevent-devel
注意:libevent-dev(Debian)和 libevent-devel(RHEL)必须装,否则 systemd 服务启动时静默失败,systemctl status memcached 显示 inactive 或 not found。
/etc/memcached.conf 里一个空格都能让服务启动失败
这个文件不是 YAML/JSON,也不支持环境变量,所有参数必须严格按命令行风格写:以 - 开头、后跟参数名、空格、再跟值。常见踩坑点:
- 把
-l 127.0.0.1写成-I 127.0.0.1(字母 L 和数字 1 混淆),服务不报错但监听地址为空 - 写成
-l="127.0.0.1"或-l '127.0.0.1',引号会被当参数值的一部分,导致绑定失败 -
-m 2048在 2GB 内存的 VPS 上可能触发 OOM Killer,建议上限设为物理内存的 50%~75% - 要监听 IPv6 + IPv4,写成
-l 127.0.0.1,::1;想外网访问,加-l 0.0.0.0,但必须同步禁 UDP:-U 0,并配防火墙放行 TCP 11211
systemctl 启动失败却不报错?先查默认配置开关
包管理器安装后,服务常被默认禁用:
- Ubuntu/Debian:
/etc/default/memcached中ENABLED必须是小写yes(不是Yes或YES) - CentOS/RHEL:
/etc/sysconfig/memcached中OPTIONS必须显式包含监听地址,例如OPTIONS="-l 127.0.0.1";若为空,systemctl start memcached会静默失败
验证是否真在运行:systemctl is-active memcached 应返回 active;若返回 unknown 或报 Unit memcached.service not found,说明包名不对(如 CentOS 上误装了 memcached-server)。
别用 telnet 验证,用 nc + stats 看真实状态
telnet localhost 11211 只能确认端口通,不能验证 memcached 协议层是否就绪。正确方式:
echo "stats settings" | nc localhost 11211
成功返回类似:
STAT maxbytes 67108864 STAT maxconns 1024 STAT tcpport 11211 STAT udpport 0 STAT inter 127.0.0.1
关键看 inter 是否匹配你配置的 -l 地址,tcpport 是否是你设的端口。如果返回空或连接被拒绝,说明进程没起来,或监听地址/端口配置错。
UDP 默认开启,容易被用于反射攻击;生产环境务必加 -U 0 关闭,除非你明确需要 UDP 协议。











