Linux Memcache 安装与配置指南:从入门到最佳实践

Memcache 是一款分布式内存对象缓存系统,旨在通过将频繁访问的数据存储在内存中,大幅降低数据库或后端服务的负载,提升应用响应速度。它以简单协议极致性能高扩展性著称,广泛应用于 web 应用(如 PHP、Python 服务)、API 缓存、会话存储等场景。

本文将从安装准备分步安装核心配置客户端测试最佳实践,为你提供一份全面的 Memcache 部署手册。无论你是 Linux 新手还是资深运维,都能快速掌握 Memcache 的生产级配置技巧。

目录#

  1. 什么是 Memcache?
  2. 安装前的准备
  3. 在 Linux 上安装 Memcache
    • 3.1 基于包管理器安装(Ubuntu/Debian/CentOS/RHEL)
    • 3.2 从源码编译安装(进阶)
  4. Memcache 核心配置详解
    • 4.1 主配置文件说明
    • 4.2 关键配置参数解析
  5. 启动与管理 Memcache 服务
    • 5.1 系统服务管理(systemd)
    • 5.2 手动启动与调试
  6. Memcache 客户端连接与测试
    • 6.1 命令行工具(telnet/libmemcached)
    • 6.2 编程语言客户端示例(PHP/Python)
  7. Memcache 最佳实践
    • 7.1 内存分配与优化
    • 7.2 性能调优
    • 7.3 高可用性与扩展
    • 7.4 安全配置
  8. 常见问题排查
  9. 总结
  10. 参考资料

1. 什么是 Memcache?#

Memcache(全称 Memcached,因 daemon 名称而常被混淆)是一个键值对(Key-Value)内存缓存系统,核心特点如下:

  • 内存存储:数据完全存于内存,读写延迟低至微秒级(比磁盘快 100-1000 倍)。
  • 简单协议:基于文本的 TCP 协议,支持 set/get/delete 等基础操作,易于实现客户端。
  • 分布式设计:客户端通过一致性哈希实现多服务器分片,无中心化节点。
  • 轻量高效:单个实例仅占用数 MB 内存,支持万级并发连接。

典型使用场景#

  • 缓存数据库查询结果(如用户信息、商品列表);
  • 存储 API 响应(如第三方接口数据);
  • 保存用户会话(如 PHP Session);
  • 加速静态资源(如图片 URL、配置文件)。

2. 安装前的准备#

在安装前,需确认以下事项:

2.1 系统环境检查#

  • 查看 Linux 发行版:
    # Ubuntu/Debian
    lsb_release -a
    # CentOS/RHEL
    cat /etc/os-release
  • 确保网络连通(用于下载包):
    ping -c 3 mirrors.aliyun.com

2.2 资源规划#

  • 内存:Memcache 完全依赖内存,建议为其分配系统可用内存的 50%-70%(预留 30% 给 OS 和其他服务)。
  • 端口:默认使用 11211,需确保未被占用:
    netstat -tuln | grep 11211

2.3 权限#

需使用 sudo 或 root 用户执行安装命令。

3. 在 Linux 上安装 Memcache#

Memcache 的安装方式分为包管理器安装(推荐)和源码编译(进阶)。

3.1 基于包管理器安装(Ubuntu/Debian/CentOS/RHEL)#

3.1.1 Ubuntu/Debian 系列#

  1. 更新包列表:
    sudo apt update
  2. 安装 Memcache 及工具:
    sudo apt install memcached libmemcached-tools
    • memcached:核心服务;
    • libmemcached-tools:命令行工具(如 memcstatmemcdump)。

3.1.2 CentOS/RHEL 系列#

  1. 启用 EPEL 源(Memcache 不在默认源中):
    sudo yum install epel-release -y
  2. 安装 Memcache:
    sudo yum install memcached libmemcached-tools -y

3.2 从源码编译安装(进阶)#

若需最新版本或自定义编译选项(如指定安装路径),可选择源码编译:

3.2.1 安装依赖#

# Ubuntu/Debian
sudo apt install gcc make libevent-dev -y
# CentOS/RHEL
sudo yum install gcc make libevent-devel -y

3.2.2 下载并编译#

  1. 下载最新源码包(从 memcached.org 获取):
    wget https://memcached.org/latest -O memcached.tar.gz
  2. 解压并进入目录:
    tar -zxvf memcached.tar.gz
    cd memcached-*
  3. 配置编译选项:
    ./configure --prefix=/usr/local/memcached  # 指定安装路径
  4. 编译并安装:
    make && sudo make install
  5. 验证安装:
    /usr/local/memcached/bin/memcached -h  # 查看帮助

4. Memcache 核心配置详解#

Memcache 的配置文件位置因发行版而异:

  • Ubuntu/Debian/etc/memcached.conf
  • CentOS/RHEL/etc/sysconfig/memcached

4.1 主配置文件说明#

以 Ubuntu 的 memcached.conf 为例,默认配置如下:

# 以 daemon 模式运行
-d
# 监听地址(仅本地)
-l 127.0.0.1
# 监听端口
-p 11211
# 运行用户
-u memcache
# 最大内存(MB)
-m 64
# 最大并发连接数
-c 1024
# 线程数(匹配 CPU 核心)
-t 4
# PID 文件路径
-P /var/run/memcached.pid

4.2 关键配置参数解析#

以下是生产环境中最常调整的参数:

参数作用说明最佳实践
-l监听地址(如 127.0.0.1 仅本地,0.0.0.0 所有地址)禁止公网暴露,优先用内网 IP(如 192.168.1.100)或 Unix 套接字。
-m最大内存(MB)分配系统可用内存的 50%-70%(如 8GB 内存设为 -m 5120)。
-c最大并发连接数根据业务量调整(如高并发场景设为 -c 2048),需监控 curr_connections
-t工作线程数设为 CPU 核心数(如 4 核设为 -t 4),避免超线程。
-I最大 item 大小(默认 1MB)若存储大对象(如 5MB 图片 URL),需调整(如 -I 5M)。
-sUnix 套接字路径(替代 TCP 连接)同机客户端优先用套接字(更快),需设权限(如 -a 0777 允许所有用户访问)。
-aUnix 套接字权限配合 -s 使用,如 -a 0770 仅允许 memcache 用户组访问。

示例:生产级配置(Ubuntu)#

修改 /etc/memcached.conf

-d
-l 192.168.1.100  # 内网 IP
-p 11211
-u memcache
-m 5120  # 5GB 内存
-c 2048  # 最大 2048 连接
-t 8     # 8 核 CPU
-I 4M    # 最大 item 4MB
-s /var/run/memcached.sock  # Unix 套接字
-a 0770  # 套接字权限

5. 启动与管理 Memcache 服务#

Memcache 通常以 systemd 服务运行,便于管理。

5.1 系统服务管理(systemd)#

5.1.1 基本命令#

操作命令
启动服务sudo systemctl start memcached
开机自启sudo systemctl enable memcached
查看状态sudo systemctl status memcached
重启服务sudo systemctl restart memcached
停止服务sudo systemctl stop memcached

5.1.2 验证运行状态#

# 查看监听端口
netstat -tuln | grep 11211
# 输出示例(TCP 监听)
tcp        0      0 192.168.1.100:11211   0.0.0.0:*               LISTEN
# 输出示例(Unix 套接字)
unix  2      [ ACC ]     STREAM     LISTENING     12345    /var/run/memcached.sock

5.2 手动启动与调试#

若需临时调试(非 daemon 模式),可手动启动:

# 手动启动(非 daemon,输出日志到终端)
/usr/bin/memcached -u memcache -l 127.0.0.1 -m 64 -c 1024
  • 调试完成后按 Ctrl+C 停止。

6. Memcache 客户端连接与测试#

Memcache 支持多种客户端(命令行、编程语言),以下是常用方式。

6.1 命令行工具(telnet/libmemcached)#

6.1.1 使用 telnet 连接#

  1. 安装 telnet(若未安装):
    sudo apt install telnet -y  # Ubuntu
    sudo yum install telnet -y  # CentOS
  2. 连接 Memcache:
    telnet 127.0.0.1 11211
  3. 执行基础操作:
    • 存储数据set <key> <flags> <exptime> <bytes> <value>
      set user:1001 0 3600 8  # key=user:1001, flags=0, 过期 3600 秒, 值长度 8
      {"name":"Alice"}  # 输入值(需换行)
      • flags:用户自定义元数据(如数据类型);
      • exptime:过期时间(秒,0 为永久);
      • bytes:值的字节长度。
    • 获取数据get <key>
      get user:1001
      VALUE user:1001 0 8
      {"name":"Alice"}
      END
    • 删除数据delete <key>
      delete user:1001
    • 查看状态stats
      stats
      STAT pid 1234
      STAT uptime 3600
      STAT bytes 1024
      STAT curr_items 100
      ...
      END
    • 清空缓存flush_all(谨慎使用!)

6.1.2 使用 libmemcached 工具#

libmemcached-tools 提供更友好的命令:

  • 查看服务状态:
    memcstat --servers=127.0.0.1:11211
  • 列出所有键:
    memcdump --servers=127.0.0.1:11211
  • 获取键值:
    memccat user:1001 --servers=127.0.0.1:11211

6.2 编程语言客户端示例#

6.2.1 PHP 客户端#

需安装 php-memcached 扩展:

# Ubuntu
sudo apt install php-memcached
# CentOS
sudo yum install php-pecl-memcached

示例代码(memcache_test.php):

<?php
// 连接 Memcache
$mem = new Memcached();
$mem->addServer('127.0.0.1', 11211);  // 或 Unix 套接字:$mem->addServer('/var/run/memcached.sock', 0);
 
// 存储数据
$mem->set('user:1001', ['name' => 'Alice', 'age' => 25], 3600);
 
// 获取数据
$user = $mem->get('user:1001');
print_r($user);  // 输出:Array([name] => Alice [age] => 25)
 
// 删除数据
$mem->delete('user:1001');
?>

运行测试:

php memcache_test.php

6.2.2 Python 客户端#

使用 python-memcached 库:

pip install python-memcached

示例代码(memcache_test.py):

import memcache
 
# 连接 Memcache
mc = memcache.Client(['127.0.0.1:11211'])  # 或 Unix 套接字:['unix:/var/run/memcached.sock']
 
# 存储数据
mc.set('user:1001', {'name': 'Alice', 'age': 25}, time=3600)
 
# 获取数据
user = mc.get('user:1001')
print(user)  # 输出:{'name': 'Alice', 'age': 25}
 
# 删除数据
mc.delete('user:1001')

运行测试:

python memcache_test.py

7. Memcache 最佳实践#

7.1 内存分配与优化#

  • 监控内存使用:通过 stats 命令查看 bytes(已用内存)、limit_maxbytes(总内存)、evictions(缓存驱逐次数)。若 evictions 持续增长,需增大 -m
  • 避免内存碎片化:使用 stats slabs 查看 slab 状态,若 fragmentation_ratio(碎片率)超过 20%,需调整 -I(最大 item 大小)。

7.2 性能调优#

  • 用 Unix 套接字代替 TCP:同机客户端优先用 -s 参数,减少网络开销(延迟降低 30%+)。
  • 启用 TCP_NODELAY:编辑配置文件,添加 -o tcp_nodelay(减少 TCP 延迟)。
  • 避免大对象:Memcache 不适合存储超过 1MB 的对象(会增加内存碎片和 GC 压力),大对象建议用 Redis。

7.3 高可用性与扩展#

  • 客户端分片:使用多台 Memcache 服务器,客户端通过一致性哈希分散键(如 PHP 的 Memcached::addServer 添加多个节点):
    $mem->addServer('192.168.1.100', 11211);
    $mem->addServer('192.168.1.101', 11211);
  • 使用代理:用 Twemproxy 或 Memcached Proxy 实现服务发现故障转移,降低客户端复杂度。

7.4 安全配置#

Memcache 无原生认证,需通过网络隔离保障安全:

  1. 限制监听地址:用 -l 指定内网 IP 或 127.0.0.1
  2. 防火墙规则
    • Ubuntu(ufw):允许内网 IP 访问 11211 端口:
      sudo ufw allow from 192.168.1.0/24 to any port 11211
    • CentOS(firewalld)
      sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="11211" protocol="tcp" accept'
      sudo firewall-cmd --reload
  3. 禁用不必要的命令:如 flush_all(清空缓存),可通过 memcached -D:flush_all 禁用。

8. 常见问题排查#

8.1 无法连接 Memcache#

  • 检查服务状态:systemctl status memcached
  • 检查监听地址:netstat -tuln | grep 11211
  • 检查防火墙:ufw status(Ubuntu)或 firewall-cmd --list-all(CentOS)。

8.2 高内存占用#

  • 查看缓存内容:memcdump --servers=127.0.0.1:11211,检查大对象;
  • 调整 -m 参数,或增大 evictions(通过缩短过期时间)。

8.3 低缓存命中率#

  • 计算命中率:get_hits / (get_hits + get_misses)(通过 stats 命令);
  • 若命中率低于 80%,需优化缓存策略(如延长过期时间、调整缓存键粒度)。

9. 总结#

Memcache 是高并发场景下的缓存神器,其核心优势是简单、快速、轻量。通过本文的步骤,你已掌握:

  • Memcache 的安装与基础配置;
  • 客户端连接与测试;
  • 生产级最佳实践(性能、安全、高可用);
  • 常见问题排查。

在实际使用中,需结合业务场景调整配置,并持续监控(如 stats 命令、Prometheus exporter),确保 Memcache 始终高效运行。

10. 参考资料#

  1. Memcache 官方文档:https://memcached.org/docs/
  2. Ubuntu 官方指南:https://ubuntu.com/server/docs/databases-memcached
  3. CentOS 官方文档:https://docs.centos.org/en-US/centos/install-guide/Memcached/
  4. PHP Memcached 扩展:https://www.php.net/manual/en/book.memcached.php
  5. Python Memcache 库:https://pypi.org/project/python-memcached/
  6. Prometheus Memcached Exporter:https://github.com/prometheus/memcached_exporter
  7. Twemproxy 代理:https://github.com/twitter/twemproxy