0%

基本命令

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. 前台启动(调试用)

    1
    memcached -m 64 -p 11211 -u nobody -vv

    输出日志将显示客户端连接和数据操作详情。

  2. 后台启动(生产用)

    1
    memcached -d -m 128 -p 11211 -u nobody -P /var/run/memcached.pid

    以守护进程方式运行,分配 128MB 内存,保存 PID 到指定文件。

数据操作核心命令

Memcached 通过简单的文本协议操作数据,支持addsetgetdelete等命令,所有命令需通过客户端(如 telnet)连接服务端后执行。

连接 Memcached 服务

使用 telnet 连接到 Memcached 服务(需先安装 telnet):

1
telnet 127.0.0.1 11211  # 连接本地11211端口的Memcached服务

1. 添加数据:add

功能:仅当键(key)不存在时,添加键值对(若键已存在则失败)。
语法

1
2
add <key> <flag> <expire> <length>\r\n
<value>\r\n
  • key:键名(字符串,不包含空格和控制字符)。
  • flag:标志位(整数,用于标识值的序列化方式,如 1 表示 JSON,2 表示二进制)。
  • expire:过期时间(秒):
    • 0:永不过期(需手动删除)。
    • 正数:从当前时间开始的秒数(最大 30 天)。
    • 大于 30 天的数值:视为 Unix 时间戳(指定过期的具体时间)。
  • length:值(value)的字节长度。
  • value:存储的具体值(需与 length 指定的长度一致)。

示例

1
2
add user:100 1 3600 8  # 键user:100,flag=1,1小时后过期,值长度8字节
zhangsan # 值(8字节:zhangsan)
  • 成功返回:STORED
  • 失败返回(键已存在):NOT_STORED

2. 设置 / 更新数据:set

功能:无论键是否存在,均设置键值对(存在则覆盖,不存在则新增)。
语法

1
2
set <key> <flag> <expire> <length>\r\n
<value>\r\n

参数含义同add

示例

1
2
set user:100 1 3600 6  # 覆盖已存在的user:100
lisi # 新值(6字节:lisi)
  • 成功返回:STORED

3. 替换数据:replace

功能:仅当键存在时,更新键值对(若键不存在则失败)。
语法

1
2
replace <key> <flag> <expire> <length>\r\n
<value>\r\n

示例

1
2
replace user:100 1 3600 7  # 替换已存在的user:100
wangwu # 新值(7字节:wangwu)
  • 成功返回:STORED
  • 失败返回(键不存在):NOT_STORED

4. 获取数据:get

功能:根据键获取对应的值。
语法

1
get <key1> <key2> ...  # 可同时获取多个键

示例

1
get user:100  # 获取键user:100的值

返回结果格式:

1
2
3
VALUE user:100 1 7  # 键名、flag、值长度
wangwu # 值
END # 结束标识
  • 若键不存在,直接返回END

5. 删除数据:delete

功能:删除指定键,可选设置锁定时间(期间禁止操作该键)。
语法

1
delete <key> [time]  # time为可选参数,单位秒

示例

  1. 直接删除:

    1
    delete user:100
    • 成功返回:DELETED
    • 失败返回(键不存在):NOT_FOUND
  2. 删除并锁定 30 秒(30 秒内无法操作该键):

    1
    delete user:100 30

6. 数值增减:incr/decr

功能:对存储的数值型值进行增减操作(值必须为无符号整数)。
语法

1
2
incr <key> <num>  # 增加num(num为正整数)
decr <key> <num> # 减少num(num为正整数)

示例

  1. 先设置一个数值:

    1
    2
    set counter 0 0 2
    10
  2. 增加 5:

    1
    incr counter 5  # 返回15
  3. 减少 3:

    1
    decr counter 3  # 返回12

7. 清空所有数据:flush_all

功能:清空缓存中所有键值对(可选延迟清空)。
语法

1
flush_all [time]  # time为可选参数,延迟time秒后清空

示例

  1. 立即清空:

    1
    flush_all

    返回:OK(所有数据被标记为过期,实际内存释放由 LRU 机制处理)。

  2. 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%,若过低需检查缓存策略(如键设计、过期时间)。

命令使用注意事项

  1. 键名限制:键名长度建议不超过 250 字节,避免包含空格、换行等特殊字符。
  2. 过期时间:超过 30 天的过期时间需用 Unix 时间戳(如1717257600表示 2025-05-31 00:00:00)。
  3. 数据大小:单条数据建议不超过 1MB,过大的数据会降低传输和处理效率。
  4. 原子操作incr/decr是原子操作,适合实现计数器(如访问量统计)。
  5. 持久化:Memcached 是内存数据库,重启后数据丢失,需配合持久化存储(如 MySQL)使用。

欢迎关注我的其它发布渠道