目录
- 什么是 Memcached?
- 安装前准备:依赖库 Libevent
- 详细安装步骤
- 启动、停止和重启 Memcached 服务
- 常用启动参数配置
- 如何测试 Memcached 是否正常工作?
- 常见问题与解答 (FAQ)
什么是 Memcached?
Memcached 是一个高性能、分布式内存对象缓存系统,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态数据库驱动网站的速度,它通常被用于加速动态 Web 应用,以减轻数据库负载。

核心特点:
- 简单:协议简单,API 丰富。
- 基于内存:数据存储在内存中,读写速度极快。
- 多线程:使用 I/O 多线程模型,可以高效处理并发连接。
- 分布式:可以轻松地横向扩展,将多个 Memcached 服务器组成一个逻辑上的缓存池。
- Key-Value 存储:简单的键值对存储,数据结构是
hashmap。
安装前准备:依赖库 Libevent
Memcached 依赖于 libevent 库,这是一个异步事件通知库,用于处理网络连接。强烈建议先安装它。
在大多数 Linux 发行版中,可以通过包管理器轻松安装:
- CentOS/RHEL:
sudo yum install libevent-devel -y
- Ubuntu/Debian:
sudo apt-get update sudo apt-get install libevent-dev -y
详细安装步骤
这里提供几种最常见的安装方式。

在 Linux (CentOS/RHEL) 上安装
使用 yum 包管理器是最简单、最推荐的方式。
# 1. 更新软件包列表 sudo yum update -y # 2. 安装 Memcached sudo yum install memcached -y # 3. 安装开发工具(如果需要从源码编译,则必需,但yum安装不需要) # sudo yum groupinstall "Development Tools" -y # 4. 安装依赖库 sudo yum install libevent-devel -y
在 Linux (Ubuntu/Debian) 上安装
使用 apt-get 包管理器。
# 1. 更新软件包列表 sudo apt-get update # 2. 安装 Memcached sudo apt-get install memcached -y # 3. 安装依赖库 sudo apt-get install libevent-dev -y
在 macOS 上安装 (推荐 Homebrew)
如果你使用的是 macOS,Homebrew 是最便捷的包管理工具。
# 1. 如果还没有安装 Homebrew,请先安装它 # /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 2. 使用 Homebrew 安装 Memcached brew install memcached # 3. 启动 Memcached 服务(可选,Homebrew 不默认启动) brew services start memcached
从源码编译安装 (通用方法)
如果你需要安装最新版本的 Memcached,或者你的系统没有预编译的包,可以从源码编译,这种方法适用于所有 Linux/Unix 系统。

# 1. 安装必要的编译工具和依赖 # CentOS/RHEL sudo yum groupinstall "Development Tools" -y sudo yum install libevent-devel -y # Ubuntu/Debian sudo apt-get update sudo apt-get install build-essential libevent-dev -y # 2. 下载 Memcached 源码包 # 前往官网获取最新版本号: https://memcached.org/downloads wget https://www.memcached.org/files/memcached-1.6.21.tar.gz # tar -xvf memcached-1.6.21.tar.gz # cd memcached-1.6.21 # 3. 配置、编译和安装 ./configure make sudo make install # 默认情况下,`memcached` 命令会被安装到 /usr/local/bin/
启动、停止和重启 Memcached 服务
安装完成后,你需要启动并管理 Memcached 服务。
使用 systemd (现代 Linux 系统,如 CentOS 7+, Ubuntu 16.04+)
# 启动 Memcached 服务 sudo systemctl start memcached # 停止 Memcached 服务 sudo systemctl stop memcached # 重启 Memcached 服务 sudo systemctl restart memcached # 查看 Memcached 服务状态 sudo systemctl status memcached # 设置开机自启 sudo systemctl enable memcached
使用 service (旧版 Linux 系统)
# 启动 sudo service memcached start # 停止 sudo service memcached stop # 重启 sudo service memcached restart # 查看状态 sudo service memcached status
使用 brew services (macOS)
# 启动 brew services start memcached # 停止 brew services stop memcached # 重启 brew services restart memcached
常用启动参数配置
你可以通过修改配置文件 /etc/sysconfig/memcached (CentOS/RHEL) 或 /etc/memcached.conf (Ubuntu/Debian) 来设置启动参数,也可以直接在启动命令后添加参数。
常用参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
-l <ip_addr> |
绑定监听的 IP 地址,默认是 0.0.0 (监听所有)。 |
-l 127.0.0.1 (只允许本地访问) |
-p <num> |
监听的 TCP 端口号,默认是 11211。 |
-p 11212 |
-m <num> |
分配给 Memcached 的最大内存大小,单位是 MB,默认是 64。 |
-m 512 (分配 512MB 内存) |
-c <num> |
最大同时连接数,默认是 1024。 |
-c 2048 |
-d |
以守护进程方式运行 (在后台运行)。 | -d |
-u <username> |
运行 Memcached 的用户,默认是 root,但建议使用普通用户如 memcached。 |
-u memcached |
-P <file> |
将进程 PID 写入指定的文件。 | -P /var/run/memcached/memcached.pid |
示例: 启动一个监听在 0.0.1,端口为 11212,使用 512MB 内存,并以 memcached 用户运行的实例。
memcached -d -m 512 -p 11212 -u memcached -l 127.0.0.1
如何测试 Memcached 是否正常工作?
使用 telnet 命令进行简单测试
telnet 是一个简单的网络工具,可以用来直接与 Memcached 交互。
-
确保
telnet已安装- CentOS/RHEL:
sudo yum install telnet -y - Ubuntu/Debian:
sudo apt-get install telnet -y
- CentOS/RHEL:
-
连接到 Memcached
# 如果你的 Memcached 监听在 127.0.0.1:11211 telnet 127.0.0.1 11211
-
执行命令 连接成功后,输入以下命令,每条命令以回车结束。
-
存储数据 (
set key flags exptime bytes)set mykey 0 60 5(存储一个键为 "mykey",过期时间为60秒,数据长度为5字节)hello(输入数据内容)STORED(表示成功) -
获取数据 (
get key)get mykeyVALUE mykey 0 5hello(返回的数据内容)END(表示结束) -
删除数据 (
delete key)delete mykeyDELETED(表示成功) -
退出 按
Ctrl+]退出 telnet 提示符,然后输入quit。
-
使用 Python 和 pymemcache 库进行测试
这是一种更现代、更强大的测试方式。
-
安装
pymemcachepip install pymemcache
-
编写 Python 测试脚本 创建一个名为
test_memcached.py的文件,并粘贴以下代码:from pymemcache.client.base import Client # 连接到 Memcached 服务器 # 如果是远程服务器,请将 '127.0.0.1' 改为对应的 IP 地址 client = Client(('127.0.0.1', 11211)) try: # 设置一个键值对 # key: 'python_key', value: b'hello python', 过期时间 60 秒 result = client.set('python_key', b'hello python', expire=60) print(f"Set 'python_key': {'Success' if result else 'Failed'}") # 获取这个键值 value = client.get('python_key') if value: print(f"Get 'python_key': {value.decode('utf-8')}") else: print("Get 'python_key': Key not found") # 删除这个键 result = client.delete('python_key') print(f"Delete 'python_key': {'Success' if result else 'Failed'}") # 再次获取,验证是否已删除 value = client.get('python_key') if value is None: print("Get 'python_key' after delete: Key not found, as expected.") except Exception as e: print(f"An error occurred: {e}") finally: # 关闭连接 client.close() -
运行脚本
python test_memcached.py
如果一切正常,你将看到类似下面的输出:
Set 'python_key': Success Get 'python_key': hello python Delete 'python_key': Success Get 'python_key' after delete: Key not found, as expected.
常见问题与解答 (FAQ)
Q1: memcached: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file
原因: 系统找不到 libevent 的共享库文件,通常是因为你编译安装了新版本的 libevent,但它的路径没有被添加到系统的 LD_LIBRARY_PATH 环境变量中。
解决方案:
-
找到
libevent的安装路径find /usr -name "libevent-2.1.so.6" 2>/dev/null # 或者 find /usr/local -name "libevent-2.1.so.6" 2>/dev/null
假设你找到了
/usr/local/lib/libevent-2.1.so.6。 -
创建软链接 将找到的库文件链接到系统默认的库路径
/usr/lib/。sudo ln -s /usr/local/lib/libevent-2.1.so.6 /usr/lib/libevent-2.1.so.6
-
更新库缓存
sudo ldconfig
-
再次运行
memcachedmemcached -V
Q2: memcached: can't open socket
原因: 通常是权限问题。memcached 尝试绑定到一个小于 1024 的端口(如 11211),但非 root 用户没有这个权限,或者你尝试绑定到一个已被占用的 IP 和端口组合。
解决方案:
-
以
root用户运行 (不推荐,有安全风险)sudo memcached -d
-
推荐:使用普通用户运行,并绑定到 1024 以上的端口
# 创建一个普通用户 sudo useradd -r -s /bin/false memcached # 以该用户运行,并绑定到 127.0.0.1 sudo memcached -d -u memcached -l 127.0.0.1
-
检查端口是否被占用
netstat -tuln | grep 11211
如果有输出,说明端口已被占用,请更改 Memcached 的监听端口 (
-p)。
Q3: 如何让 Memcached 开机自启?
使用 systemd (现代系统):
# 启用开机自启 sudo systemctl enable memcached # 禁用开机自启 sudo systemctl disable memcached
使用 chkconfig (旧版系统):
# 添加到开机自启服务列表 sudo chkconfig memcached on # 从开机自启服务列表移除 sudo chkconfig memcached off
注意: 通过包管理器(如 yum 或 apt)安装的 memcached 服务通常会自动配置好开机自启,你可以使用 systemctl is-enabled memcached 来检查当前状态。
