memcached在linux上推荐用包管理器安装,ubuntu/debian执行sudo apt install memcached libmemcached-tools,centos/rhel用sudo yum install memcached;装完运行systemctl is-active memcached验证状态,修改/etc/memcached.conf调整-m、-l等参数,注意语法严谨性及安全配置。

Memcached 在 Linux 上装得快不快,取决于你用包管理器还是源码编译——绝大多数场景直接用 apt 或 yum 装就行,既省事又安全;只有当你需要特定版本、或要启用 SASL 认证时,才值得折腾源码。
用系统包管理器安装最稳妥
Ubuntu/Debian 系统执行 sudo apt update && sudo apt install memcached libmemcached-tools,CentOS/RHEL 用 sudo yum install memcached(RHEL 8+ 改用 dnf)。这会自动拉取适配当前系统的二进制包,并注册为 systemd 服务。
常见错误现象:装完启动失败,报 Failed to start memcached.service: Unit memcached.service not found——说明没装对包名,比如在 CentOS 上误用了 memcached-server(不存在);或 Ubuntu 22.04 后部分镜像默认不带 memcached,需确认仓库启用状态。
- 装完立刻验证:
systemctl is-active memcached应返回active - 检查监听地址:
ss -tlnp | grep :11211,默认只绑127.0.0.1:11211,外网访问需改配置 -
libmemcached-tools(Debian/Ubuntu)或memcached-devel(RHEL)必须装,否则memstat、memcdump等调试命令不可用
修改 /etc/memcached.conf 控制核心行为
这个配置文件不支持 JSON 或环境变量,所有参数都靠行首加 - 的命令行风格写法。改错一个字母(比如把 -l 写成 -I)会导致服务启动静默失败。
关键参数含义和易踩坑点:
-
-m 64:分配 64MB 内存给缓存,别设太大,Linux OOM Killer 可能直接杀掉进程 -
-l 127.0.0.1,::1:逗号分隔多个监听地址,想让外网连就加-l 0.0.0.0,但必须配合防火墙(如ufw allow 11211)且禁用-U 0(关 UDP)防反射攻击 -
-c 1024:最大并发连接数,高并发场景建议调到 4096+,但要同步调高系统限制:echo 'memcached soft nofile 8192' >> /etc/security/limits.conf - 注释掉
-S(SASL)除非你真有认证需求,否则启动报Failed to initialize SASL就卡住
验证连通性与基础操作不能只靠 telnet
telnet 127.0.0.1 11211 只能测端口通不通,真正要看缓存是否可用,得发标准协议指令。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
手动测试步骤:
- 运行
nc 127.0.0.1 11211进入交互 - 输入
set test 0 60 5(key=test, flag=0, expire=60s, value-len=5),回车后输入hello,再回车 - 输入
get test,应返回VALUE test 0 5\r\nhello\r\nEND\r\n
如果返回空白或 ERROR,优先查 journalctl -u memcached -n 50,常见原因是配置里写了 -l 但值为空,或 -m 超过可用内存导致 malloc 失败。
PHP/Python 客户端连不上?先看 socket 和扩展是否匹配
PHP 默认用 memcached 扩展(不是 memcache),它依赖 libmemcached;Python 用 pymemcache 或 python-memcached,前者默认走 TCP,后者支持 binary 协议但需服务端开 -B binary(不推荐)。
典型故障链:
- PHP 报
Failed to connect to localhost:11211→ 检查phpinfo()是否加载了memcached扩展,不是memcache - Python 报
ConnectionRefusedError→ 确认脚本里 host 写的是'127.0.0.1'而非'localhost'(后者可能走 IPv6 或 DNS 解析失败) - 存进去的值取出来是
None→ 查服务端日志是否有slab class分配失败,大概率是-m设太小,缓存项被立即踢出
UDP 端口(11211/udp)默认开启,但所有主流客户端都走 TCP,不用特意开;若防火墙已放行 TCP 却仍连不上,盯紧 SELinux(RHEL/CentOS)——setsebool -P memcached_disable_trans on 是最快绕过方案。










