Memcached 基本命令详解:从启动到数据操作
Memcached 是一款高性能的分布式内存缓存系统,通过简单的文本协议提供键值对存储服务。本文详细介绍其核心命令,包括服务启动、数据 CRUD、统计监控等,帮助快速上手 Memcached 操作。
服务启动命令
Memcached 启动命令通过参数配置内存、端口、运行方式等核心属性,基本格式如下:
1 | memcached [参数] |
常用启动参数
| 参数 | 作用 | 示例 |
|---|---|---|
-d |
以守护进程(后台)方式运行 | memcached -d |
-m |
分配的内存大小(单位:MB,默认 64MB) | memcached -m 128(分配 128MB) |
-p |
监听端口(默认 11211) | memcached -p 11212(使用 11212 端口) |
-u |
运行用户(需 root 权限指定) | memcached -u nobody(以 nobody 用户运行) |
-l |
绑定 IP 地址(默认监听所有网卡) | memcached -l 192.168.1.100(仅允许指定 IP 访问) |
-c |
最大并发连接数(默认 1024) | memcached -c 2048(支持 2048 并发) |
-P |
保存进程 PID 的文件路径 | memcached -P /var/run/memcached.pid |
-v/-vv |
显示详细日志(-v 基本日志,-vv 调试级日志) | memcached -vv(前台运行并输出详细日志) |
典型启动示例
前台启动(调试用):
1
memcached -m 64 -p 11211 -u nobody -vv
输出日志将显示客户端连接和数据操作详情。
后台启动(生产用):
1
memcached -d -m 128 -p 11211 -u nobody -P /var/run/memcached.pid
以守护进程方式运行,分配 128MB 内存,保存 PID 到指定文件。
数据操作核心命令
Memcached 通过简单的文本协议操作数据,支持add、set、get、delete等命令,所有命令需通过客户端(如 telnet)连接服务端后执行。
连接 Memcached 服务
使用 telnet 连接到 Memcached 服务(需先安装 telnet):
1 | telnet 127.0.0.1 11211 # 连接本地11211端口的Memcached服务 |
1. 添加数据:add
功能:仅当键(key)不存在时,添加键值对(若键已存在则失败)。
语法:
1 | add <key> <flag> <expire> <length>\r\n |
key:键名(字符串,不包含空格和控制字符)。flag:标志位(整数,用于标识值的序列化方式,如 1 表示 JSON,2 表示二进制)。- expire:过期时间(秒):
- 0:永不过期(需手动删除)。
- 正数:从当前时间开始的秒数(最大 30 天)。
- 大于 30 天的数值:视为 Unix 时间戳(指定过期的具体时间)。
length:值(value)的字节长度。value:存储的具体值(需与 length 指定的长度一致)。
示例:
1 | add user:100 1 3600 8 # 键user:100,flag=1,1小时后过期,值长度8字节 |
- 成功返回:
STORED - 失败返回(键已存在):
NOT_STORED
2. 设置 / 更新数据:set
功能:无论键是否存在,均设置键值对(存在则覆盖,不存在则新增)。
语法:
1 | set <key> <flag> <expire> <length>\r\n |
参数含义同add。
示例:
1 | set user:100 1 3600 6 # 覆盖已存在的user:100 |
- 成功返回:
STORED
3. 替换数据:replace
功能:仅当键存在时,更新键值对(若键不存在则失败)。
语法:
1 | replace <key> <flag> <expire> <length>\r\n |
示例:
1 | replace user:100 1 3600 7 # 替换已存在的user:100 |
- 成功返回:
STORED - 失败返回(键不存在):
NOT_STORED
4. 获取数据:get
功能:根据键获取对应的值。
语法:
1 | get <key1> <key2> ... # 可同时获取多个键 |
示例:
1 | get user:100 # 获取键user:100的值 |
返回结果格式:
1 | VALUE user:100 1 7 # 键名、flag、值长度 |
- 若键不存在,直接返回
END。
5. 删除数据:delete
功能:删除指定键,可选设置锁定时间(期间禁止操作该键)。
语法:
1 | delete <key> [time] # time为可选参数,单位秒 |
示例:
直接删除:
1
delete user:100
- 成功返回:
DELETED - 失败返回(键不存在):
NOT_FOUND
- 成功返回:
删除并锁定 30 秒(30 秒内无法操作该键):
1
delete user:100 30
6. 数值增减:incr/decr
功能:对存储的数值型值进行增减操作(值必须为无符号整数)。
语法:
1 | incr <key> <num> # 增加num(num为正整数) |
示例:
先设置一个数值:
1
2set counter 0 0 2
10增加 5:
1
incr counter 5 # 返回15
减少 3:
1
decr counter 3 # 返回12
7. 清空所有数据:flush_all
功能:清空缓存中所有键值对(可选延迟清空)。
语法:
1 | flush_all [time] # time为可选参数,延迟time秒后清空 |
示例:
立即清空:
1
flush_all
返回:
OK(所有数据被标记为过期,实际内存释放由 LRU 机制处理)。5 秒后清空:
1
flush_all 5
统计监控命令:stats
stats命令用于查看 Memcached 的运行状态和统计信息,是监控服务的核心工具。
基本统计
1 | stats # 输出所有统计信息 |
核心统计项说明:
| 统计项 | 含义 |
|---|---|
pid |
进程 ID |
uptime |
运行时间(秒) |
version |
Memcached 版本 |
curr_items |
当前存储的键值对数量 |
total_items |
累计存储的键值对数量 |
bytes |
存储数据占用的字节数 |
curr_connections |
当前连接数 |
total_connections |
累计连接数 |
cmd_get |
累计 get 命令次数 |
cmd_set |
累计 set 命令次数 |
get_hits |
get 命中次数(缓存有效) |
get_misses |
get 未命中次数(缓存失效) |
limit_maxbytes |
最大可用内存(字节) |
命中率计算
缓存命中率是衡量 Memcached 有效性的关键指标:
1 | 命中率 = get_hits / (get_hits + get_misses) * 100% |
- 理想命中率应高于 90%,若过低需检查缓存策略(如键设计、过期时间)。
命令使用注意事项
- 键名限制:键名长度建议不超过 250 字节,避免包含空格、换行等特殊字符。
- 过期时间:超过 30 天的过期时间需用 Unix 时间戳(如
1717257600表示 2025-05-31 00:00:00)。 - 数据大小:单条数据建议不超过 1MB,过大的数据会降低传输和处理效率。
- 原子操作:
incr/decr是原子操作,适合实现计数器(如访问量统计)。 - 持久化:Memcached 是内存数据库,重启后数据丢失,需配合持久化存储(如 MySQL)使用。