Skip to content

Memcached CLI 工具

Memcached CLI(Command Line Interface)工具是用于管理、监控和操作 Memcached 服务器的命令行工具集合。这些工具提供了便捷的方式来执行各种 Memcached 管理任务,如查看服务器状态、修改配置、管理数据、进行性能测试等。

Memcached CLI 工具主要分为三类:

  • 官方工具:由 Memcached 官方提供,如 memcached-tool、memcached 服务器本身
  • 第三方工具:由社区或厂商开发,如 memtier_benchmark、libmemcached-tools 等
  • 自定义脚本:根据业务需求编写的自定义管理脚本,如自动化监控脚本、数据备份脚本等

CLI 工具具有轻量级、高效、自动化友好、跨平台和功能强大等优势,不需要安装复杂的图形界面,命令行操作通常更高效,易于集成到自动化脚本和工具链中,支持多种操作系统,提供了丰富的管理和监控功能。

官方 CLI 工具

1. memcached-tool

工具简介

memcached-tool 是 Memcached 官方提供的管理工具,用于查看和管理 Memcached 服务器的状态和数据。

安装方法

bash
# Ubuntu/Debian
apt-get install libmemcached-tools

# CentOS/RHEL
yum install libmemcached-tools

# 编译安装(如果官方源没有)
git clone https://github.com/memcached/memcached.git
cd memcached
./configure && make
cp scripts/memcached-tool /usr/local/bin/

常用命令

查看服务器状态

bash
# 查看服务器状态统计
memcached-tool 127.0.0.1:11211 stats

# 查看详细的 slab 统计信息
memcached-tool 127.0.0.1:11211 display

# 查看 slab 分配情况
memcached-tool 127.0.0.1:11211 stats items

# 查看缓存项统计
memcached-tool 127.0.0.1:11211 stats sizes

管理内存

bash
# 释放指定 slab 类的内存
memcached-tool 127.0.0.1:11211 flush [slab_id]

# 重新分配 slab 内存
memcached-tool 127.0.0.1:11211 move [source_slab] [dest_slab]

导出/导入数据

bash
# 导出数据到文件
memcached-tool 127.0.0.1:11211 dump > memcached_dump.txt

# 从文件导入数据
memcached-tool 127.0.0.1:11211 restore < memcached_dump.txt

2. memcached 服务器命令

工具简介

memcached 服务器本身提供了一些命令行选项,可以用于配置和启动 Memcached 服务。

常用命令行选项

bash
# 基本启动命令
memcached -d -p 11211 -m 1024 -c 1024 -u memcached -l 0.0.0.0

# 详细选项说明
# -d: 以守护进程方式运行
# -p: 监听端口
# -m: 分配的内存大小(MB)
# -c: 最大连接数
# -u: 运行用户
# -l: 监听地址
# -t: 工作线程数
# -f: slab 增长因子
# -I: 最大 item 大小
# -S: 启用 SASL 认证
# -v:  verbose 模式,输出详细日志
# -vv: 更详细的日志

调试模式

bash
# 调试模式启动,输出详细日志
memcached -p 11211 -m 1024 -c 1024 -u memcached -l 0.0.0.0 -vv

3. telnet 命令

工具简介

虽然 telnet 不是 Memcached 专用工具,但它是管理 Memcached 最常用的命令行工具之一,可以直接连接到 Memcached 服务器并执行命令。

基本使用

bash
# 连接到 Memcached 服务器
telnet 127.0.0.1 11211

# 执行 stats 命令查看服务器状态
stats

# 执行 set 命令设置数据
set test_key 0 3600 5
test1

# 执行 get 命令获取数据
get test_key

# 执行 delete 命令删除数据
delete test_key

# 执行 flush_all 命令清空缓存
flush_all

# 退出连接
quit

常用 Memcached 命令

命令描述示例
set设置数据set key 0 3600 5 value
add添加数据(如果 key 不存在)add key 0 3600 5 value
replace替换数据(如果 key 存在)replace key 0 3600 6 newval
get获取数据get key
delete删除数据delete key
incr增加数值incr counter 1
decr减少数值decr counter 1
flush_all清空所有缓存flush_all
stats查看服务器状态stats
stats items查看 items 统计stats items
stats slabs查看 slabs 统计stats slabs
version查看服务器版本version

第三方 CLI 工具

1. memtier_benchmark

工具简介

memtier_benchmark 是 Redis Labs 开发的高性能 Memcached 和 Redis 基准测试工具,用于测试 Memcached 服务器的性能。

安装方法

bash
# Ubuntu/Debian
apt-get install build-essential libevent-dev libssl-dev libpcre3-dev zlib1g-dev
wget https://github.com/RedisLabs/memtier_benchmark/archive/refs/tags/1.4.0.tar.gz
tar -xzf 1.4.0.tar.gz
cd memtier_benchmark-1.4.0
./autogen.sh
./configure
make && make install

# 使用 Docker
docker pull redislabs/memtier_benchmark
docker run -it --rm redislabs/memtier_benchmark --help

基本使用

bash
# 基本性能测试
memtier_benchmark -s 127.0.0.1 -p 11211 -c 10 -t 4 --test-time 30

# 测试结果分析
# 关注吞吐量(Ops/sec)、延迟(Latency)、命中率(Hit Rate)等指标

高级选项

bash
# 设置读写比例为 1:1
memtier_benchmark -s 127.0.0.1 -p 11211 -c 10 -t 4 --test-time 30 --ratio=1:1

# 使用二进制协议
memtier_benchmark -s 127.0.0.1 -p 11211 -c 10 -t 4 --test-time 30 --protocol=memcache_binary

# 设置数据大小为 128 字节
memtier_benchmark -s 127.0.0.1 -p 11211 -c 10 -t 4 --test-time 30 --data-size=128

# 预热数据
memtier_benchmark -s 127.0.0.1 -p 11211 -c 10 -t 4 --test-time 30 --ratio=1:0 --warmup-time=5

2. libmemcached-tools

工具简介

libmemcached-tools 是 libmemcached 库提供的一组 Memcached 管理工具,包括 memcstat、memccat、memcdump 等。

安装方法

bash
# Ubuntu/Debian
apt-get install libmemcached-tools

# CentOS/RHEL
yum install libmemcached-tools

常用工具

memcstat:查看服务器状态

bash
# 查看服务器基本状态
memcstat --servers=127.0.0.1:11211

# 查看详细的 slabs 统计
memcstat --servers=127.0.0.1:11211 --verbose

memccat:获取缓存数据

bash
# 获取单个 key 的数据
memccat --servers=127.0.0.1:11211 test_key

# 获取多个 key 的数据
memccat --servers=127.0.0.1:11211 key1 key2 key3

memcset:设置缓存数据

bash
# 设置单个 key 的数据
memcset --servers=127.0.0.1:11211 test_key=value

# 设置多个 key 的数据
memcset --servers=127.0.0.1:11211 key1=value1 key2=value2

memcdel:删除缓存数据

bash
# 删除单个 key
memcdel --servers=127.0.0.1:11211 test_key

# 删除多个 key
memcdel --servers=127.0.0.1:11211 key1 key2 key3

memcdump:导出缓存数据

bash
# 导出所有数据
memcdump --servers=127.0.0.1:11211

# 导出数据到文件
memcdump --servers=127.0.0.1:11211 > dump.txt

3. mctop

工具简介

mctop 是一个类似 top 的 Memcached 实时监控工具,用于实时查看 Memcached 服务器的性能指标。

安装方法

bash
# 安装依赖
gem install mctop

# 或者使用源码安装
git clone https://github.com/etsy/mctop.git
cd mctop
gem build mctop.gemspec
gem install mctop-*.gem

基本使用

bash
# 连接到 Memcached 服务器
mctop --server=127.0.0.1:11211

# 常用交互命令
# h: 显示帮助
# q: 退出
# s: 切换排序字段
# r: 反向排序
# c: 切换显示字段

自定义 CLI 脚本

1. 自动化监控脚本

脚本示例:监控 Memcached 状态

bash
#!/bin/bash

# Memcached 服务器地址
SERVER="127.0.0.1:11211"

# 监控指标
METRICS=("get_hits" "get_misses" "curr_items" "total_items" "bytes" "curr_connections" "total_connections" "evictions")

# 获取 stats 数据
STATS=$(echo -e "stats
quit" | nc $SERVER 2>/dev/null)

# 输出监控结果
echo "Memcached 监控报告 - $(date)"
echo "=============================="

for METRIC in "${METRICS[@]}"; do
    VALUE=$(echo "$STATS" | grep "STAT $METRIC " | awk '{print $3}')
    echo "$METRIC: $VALUE"
done

# 计算命中率
GET_HITS=$(echo "$STATS" | grep "STAT get_hits " | awk '{print $3}')
GET_MISSES=$(echo "$STATS" | grep "STAT get_misses " | awk '{print $3}')
TOTAL_GETS=$((GET_HITS + GET_MISSES))

if [ $TOTAL_GETS -gt 0 ]; then
    HIT_RATE=$(echo "scale=2; $GET_HITS / $TOTAL_GETS * 100" | bc)
    echo "命中率: ${HIT_RATE}%"
else
    echo "命中率: 0%"
fi

2. 数据备份脚本

脚本示例:定期备份 Memcached 数据

bash
#!/bin/bash

# 配置
SERVER="127.0.0.1:11211"
BACKUP_DIR="/var/backups/memcached"
RETENTION_DAYS=7

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份文件名
BACKUP_FILE="$BACKUP_DIR/memcached-$(date +%Y%m%d%H%M%S).dump"

# 导出数据
echo "导出 Memcached 数据到 $BACKUP_FILE..."
memcdump --servers=$SERVER > $BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "备份成功!"
else
    echo "备份失败!"
    exit 1
fi

# 压缩备份文件
echo "压缩备份文件..."
gzip $BACKUP_FILE

# 删除过期备份
echo "清理 $RETENTION_DAYS 天前的备份..."
find $BACKUP_DIR -name "memcached-*.dump.gz" -mtime +$RETENTION_DAYS -delete

echo "备份任务完成!"

3. 批量操作脚本

脚本示例:批量删除匹配模式的 key

python
#!/usr/bin/env python3
import telnetlib
import re

def delete_keys_by_pattern(host, port, pattern):
    """批量删除匹配指定模式的 key"""
    # 连接到 Memcached
    tn = telnetlib.Telnet(host, port)
    
    # 获取所有 key
    tn.write(b"stats items\n")
    items_response = tn.read_until(b"END\n").decode('utf-8')
    
    deleted_count = 0
    
    # 解析 items 响应,获取 slab 编号
    slab_ids = set()
    for line in items_response.split('\n'):
        if line.startswith('STAT items:'):
            slab_id = line.split(':')[1]
            slab_ids.add(slab_id)
    
    # 遍历每个 slab,获取其中的 key
    for slab_id in slab_ids:
        # 获取 slab 中的 keys
        tn.write(f"stats cachedump {slab_id} 0\n".encode('utf-8'))
        cachedump_response = tn.read_until(b"END\n").decode('utf-8')
        
        # 匹配并删除符合条件的 key
        for line in cachedump_response.split('\n'):
            if line.startswith('ITEM '):
                key = line.split()[1]
                if re.match(pattern, key):
                    # 删除 key
                    tn.write(f"delete {key}\n".encode('utf-8'))
                    tn.read_until(b"\n")
                    deleted_count += 1
    
    # 关闭连接
    tn.write(b"quit\n")
    tn.close()
    
    return deleted_count

if __name__ == "__main__":
    import sys
    
    if len(sys.argv) != 4:
        print(f"用法: {sys.argv[0]} <host> <port> <pattern>")
        sys.exit(1)
    
    host = sys.argv[1]
    port = int(sys.argv[2])
    pattern = sys.argv[3]
    
    deleted = delete_keys_by_pattern(host, port, pattern)
    print(f"已删除 {deleted} 个匹配 '{pattern}' 的 key")

CLI 工具最佳实践

1. 工具选择建议

根据任务选择合适的工具

  • 性能测试:memtier_benchmark
  • 日常管理:memcached-tool、telnet
  • 批量操作:libmemcached-tools
  • 实时监控:mctop
  • 自动化脚本:自定义脚本

考虑工具的优缺点

  • 官方工具:稳定性好,但功能可能有限
  • 第三方工具:功能丰富,但可能需要额外安装
  • 自定义脚本:灵活定制,但需要维护成本

2. 安全使用

限制访问权限

  • 不要将 Memcached 暴露在公网
  • 配置防火墙,限制 CLI 工具的访问 IP
  • 启用 SASL 认证,保护敏感操作

使用安全连接

  • 对于远程管理,使用 SSH 隧道或 VPN
  • 考虑使用 TLS 加密传输

审计操作

  • 记录重要的 CLI 操作
  • 定期审查操作日志
  • 实现操作审计机制

3. 高效使用

使用别名和函数

  • 为常用命令创建别名
  • 编写 Shell 函数简化复杂操作

示例别名

bash
# ~/.bashrc 或 ~/.zshrc
alias mcd="memcdel --servers=127.0.0.1:11211"
alias mcget="memccat --servers=127.0.0.1:11211"
alias mcset="memcset --servers=127.0.0.1:11211"
alias mcstat="memcstat --servers=127.0.0.1:11211"
alias mcdump="memcdump --servers=127.0.0.1:11211"

alias mctelnet="telnet 127.0.0.1 11211"

脚本自动化

  • 将重复的管理任务自动化
  • 集成到 CI/CD 流程中
  • 实现定期自动备份、监控等

4. 监控与告警

建立监控体系

  • 定期使用 CLI 工具检查 Memcached 状态
  • 实现自动化监控脚本
  • 设置告警阈值,及时发现问题

监控关键指标

  • 缓存命中率
  • 内存使用率
  • 连接数
  • 驱逐率
  • 错误率

常见问题(FAQ)

Q1: 如何选择合适的 Memcached CLI 工具?

A1: 选择合适的 CLI 工具应考虑以下因素:

  • 要执行的任务类型(监控、管理、测试等)
  • 工具的功能和性能
  • 工具的易用性和学习曲线
  • 工具的维护状态和社区支持
  • 与现有工具链的兼容性

Q2: 如何在生产环境中安全使用 CLI 工具?

A2: 在生产环境中安全使用 CLI 工具的方法包括:

  • 限制工具的访问权限
  • 使用 SSH 隧道或 VPN 进行远程管理
  • 启用 SASL 认证
  • 记录和审计所有操作
  • 定期更新工具版本,修复安全漏洞

Q3: 如何自动化 Memcached 管理任务?

A3: 自动化 Memcached 管理任务的方法包括:

  • 编写 Shell 或 Python 脚本
  • 使用配置管理工具(如 Ansible、Puppet)
  • 集成到 CI/CD 流程中
  • 使用监控系统(如 Prometheus + Grafana)实现自动告警

Q4: 如何测试 Memcached 性能?

A4: 测试 Memcached 性能的方法包括:

  • 使用 memtier_benchmark 进行基准测试
  • 模拟真实业务场景进行压力测试
  • 测试不同配置下的性能差异
  • 监控生产环境的实际性能指标

Q5: 如何批量管理 Memcached 数据?

A5: 批量管理 Memcached 数据的方法包括:

  • 使用 libmemcached-tools 工具集
  • 编写自定义脚本
  • 使用 Memcached 客户端库编写批量操作程序
  • 利用 memcached-tool 的导入导出功能

Q6: 如何监控 Memcached 服务器状态?

A6: 监控 Memcached 服务器状态的方法包括:

  • 使用 memcached-tool 查看状态
  • 使用 telnet 执行 stats 命令
  • 使用 mctop 实时监控
  • 编写自动化监控脚本
  • 集成到监控系统中

Q7: 如何备份和恢复 Memcached 数据?

A7: 备份和恢复 Memcached 数据的方法包括:

  • 使用 memcached-tool 或 memcdump 导出数据
  • 使用自定义脚本定期备份
  • 恢复时使用 memcached-tool 或自定义脚本导入
  • 注意:Memcached 备份适合冷备份场景,不建议用于实时恢复

Q8: 如何处理 Memcached 内存碎片?

A8: 处理 Memcached 内存碎片的方法包括:

  • 使用 memcached-tool 查看碎片情况
  • 调整 slab 增长因子(-f 参数)
  • 启用 slab_automove 和 slab_autoreassign 选项
  • 重启 Memcached 服务器(在维护窗口)