Memcached CLI #

一、连接Memcached #

1.1 使用telnet连接 #

bash
# 连接本地Memcached
telnet 127.0.0.1 11211

# 连接远程Memcached
telnet 192.168.1.100 11211

# 连接成功提示
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

1.2 使用nc连接 #

bash
# 使用nc连接
nc 127.0.0.1 11211

# 发送命令
echo "stats" | nc 127.0.0.1 11211

# 获取数据
echo "get key" | nc 127.0.0.1 11211

1.3 使用memcstat #

bash
# 查看统计信息
memcstat --servers=127.0.0.1:11211

# 查看多个服务器
memcstat --servers=127.0.0.1:11211,127.0.0.1:11212

二、基本操作命令 #

2.1 存储数据 #

bash
# set - 存储数据(存在则覆盖)
set user:1001 0 3600 23
{"name":"John","age":25}
STORED

# add - 添加数据(存在则失败)
add user:1001 0 3600 23
{"name":"Jane","age":30}
NOT_STORED

# replace - 替换数据(不存在则失败)
replace user:1001 0 3600 27
{"name":"John","age":26,"city":"NY"}
STORED

2.2 读取数据 #

bash
# get - 获取单个数据
get user:1001
VALUE user:1001 0 27
{"name":"John","age":26,"city":"NY"}
END

# 获取多个数据
get user:1001 user:1002 user:1003
VALUE user:1001 0 27
{"name":"John","age":26,"city":"NY"}
VALUE user:1002 0 28
{"name":"Jane","age":28,"city":"LA"}
END

# gets - 获取数据和CAS ID
gets user:1001
VALUE user:1001 0 27 123
{"name":"John","age":26,"city":"NY"}
END

2.3 删除数据 #

bash
# delete - 删除数据
delete user:1001
DELETED

# 删除不存在的数据
delete user:9999
NOT_FOUND

2.4 更新数据 #

bash
# append - 追加到末尾
set message 0 0 5
hello
STORED
append message 0 0 6
 world
STORED
get message
VALUE message 0 11
hello world
END

# prepend - 添加到开头
prepend message 0 0 6
Hello 
STORED
get message
VALUE message 0 17
Hello hello world
END

2.5 计数器操作 #

bash
# 初始化计数器
set counter 0 0 1
0
STORED

# 递增
incr counter 1
1
incr counter 10
11

# 递减
decr counter 5
6

# 不存在的计数器
incr notexist 1
NOT_FOUND

三、高级操作命令 #

3.1 CAS操作 #

bash
# 获取数据和CAS ID
gets user:1001
VALUE user:1001 0 27 123
{"name":"John","age":26,"city":"NY"}
END

# 使用CAS更新
cas user:1001 0 3600 27 123
{"name":"John","age":27,"city":"NY"}
STORED

# CAS ID不匹配
cas user:1001 0 3600 27 999
{"name":"John","age":28,"city":"NY"}
EXISTS

3.2 批量操作 #

bash
# 批量获取
get user:1001 user:1002 user:1003

# 批量设置(需要多次set)
set user:1001 0 3600 23
{"name":"John","age":25}
STORED
set user:1002 0 3600 23
{"name":"Jane","age":28}
STORED

3.3 noreply选项 #

bash
# 使用noreply不等待响应
set user:1001 0 3600 23 noreply
{"name":"John","age":25}

# 适用于批量操作,提高性能

四、统计命令 #

4.1 stats命令 #

bash
# 查看所有统计信息
stats
STAT pid 1234
STAT uptime 123456
STAT time 1704067200
STAT version 1.6.29
STAT libevent 2.1.12-stable
STAT pointer_size 64
STAT rusage_user 123.456
STAT rusage_system 234.567
STAT max_connections 1024
STAT curr_connections 10
STAT total_connections 1000
STAT connection_structures 20
STAT cmd_get 10000
STAT cmd_set 5000
STAT cmd_flush 10
STAT cmd_touch 100
STAT get_hits 8000
STAT get_misses 2000
STAT delete_misses 100
STAT delete_hits 50
STAT incr_misses 20
STAT incr_hits 80
STAT decr_misses 10
STAT decr_hits 40
STAT cas_misses 5
STAT cas_hits 15
STAT cas_badval 3
STAT touch_hits 50
STAT touch_misses 10
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 1000000
STAT bytes_written 2000000
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT slab_reassign_rescues 0
STAT slab_reassign_chunk_rescues 0
STAT slab_reassign_evictions_nomem 0
STAT slab_reassign_inline_reclaim 0
STAT slab_reassign_busy_items 0
STAT slab_reassign_busy_deletes 0
STAT slab_reassign_running 0
STAT slabs_moved 0
STAT lru_hits 0
STAT lru_tail_repairs 0
STAT moves_to_cold 0
STAT moves_to_warm 0
STAT moves_within_lru 0
STAT direct_reclaims 0
STAT lru_bumps_dropped 0
END

4.2 重要统计指标 #

bash
# 查看内存使用
stats
STAT bytes 1000000          # 当前存储的字节数
STAT limit_maxbytes 67108864  # 最大内存限制
STAT maxbytes 67108864      # 最大内存限制

# 查看连接数
STAT curr_connections 10    # 当前连接数
STAT total_connections 1000  # 总连接数
STAT max_connections 1024   # 最大连接数

# 查看命中率
STAT get_hits 8000          # 命中次数
STAT get_misses 2000        # 未命中次数
# 命中率 = get_hits / (get_hits + get_misses)

# 查看命令统计
STAT cmd_get 10000          # get命令次数
STAT cmd_set 5000           # set命令次数
STAT cmd_flush 10           # flush命令次数

4.3 stats items #

bash
# 查看Item统计
stats items
STAT items:1:number 100
STAT items:1:age 3600
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:evicted_active 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 0
STAT items:1:moves_to_cold 0
STAT items:1:moves_to_warm 0
STAT items:1:moves_within_lru 0
STAT items:1:direct_reclaims 0
STAT items:1:hits_to_hot 0
STAT items:1:hits_to_warm 0
STAT items:1:hits_to_cold 0
STAT items:1:hits_to_temp 0
END

4.4 stats slabs #

bash
# 查看Slab统计
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 100
STAT 1:free_chunks 10822
STAT 1:free_chunks_end 0
STAT 1:get_hits 5000
STAT 1:cmd_set 2000
STAT 1:delete_hits 50
STAT 1:incr_hits 10
STAT 1:decr_hits 5
STAT 1:cas_hits 3
STAT 1:cas_badval 2
STAT 1:touch_hits 20
STAT active_slabs 1
STAT total_malloced 1048576
END

4.5 stats sizes #

bash
# 查看数据大小分布
stats sizes
STAT 96 50
STAT 120 30
STAT 152 20
STAT 192 10
END

五、管理命令 #

5.1 flush_all #

bash
# 清空所有数据
flush_all
OK

# 延迟清空(10秒后)
flush_all 10
OK

# 指定时间清空
flush_all 1704067200
OK

5.2 version #

bash
# 查看版本
version
VERSION 1.6.29

5.3 verbosity #

bash
# 设置日志级别
verbosity 2
OK

# 级别说明
# 0 - 无日志
# 1 - 错误日志
# 2 - 警告日志
# 3 - 信息日志

5.4 quit #

bash
# 退出连接
quit

六、使用memcached-tool #

6.1 查看统计 #

bash
# 查看统计信息
memcached-tool 127.0.0.1:11211 stats

# 查看详细信息
memcached-tool 127.0.0.1:11211 display

# 查看Slab信息
memcached-tool 127.0.0.1:11211 slabs

6.2 导出数据 #

bash
# 导出所有数据
memcached-tool 127.0.0.1:11211 dump

# 导出格式
add key1 0 3600 5
hello
add key2 0 3600 5
world

6.3 分析内存 #

bash
# 查看内存使用
memcached-tool 127.0.0.1:11211

# 输出示例
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1     96B      3600s       1     100     no        0        0    0
  2     120B     3600s       1      50     no        0        0    0
  3     152B     3600s       1      30     no        0        0    0

七、使用libmemcached工具 #

7.1 memcapable #

bash
# 测试服务器能力
memcapable --servers=127.0.0.1:11211

7.2 memcat #

bash
# 获取数据
memcat --servers=127.0.0.1:11211 key1

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

7.3 memcp #

bash
# 复制数据到Memcached
echo "hello" | memcp --servers=127.0.0.1:11211 key1

# 从文件复制
memcp --servers=127.0.0.1:11211 file.txt key2

7.4 memrm #

bash
# 删除数据
memrm --servers=127.0.0.1:11211 key1

# 删除多个数据
memrm --servers=127.0.0.1:11211 key1 key2 key3

7.5 memflush #

bash
# 清空所有数据
memflush --servers=127.0.0.1:11211

7.6 memslap #

bash
# 性能测试
memslap --servers=127.0.0.1:11211

# 指定并发数
memslap --servers=127.0.0.1:11211 --concurrency=10

# 指定测试次数
memslap --servers=127.0.0.1:11211 --execute-number=10000

八、常用操作示例 #

8.1 缓存用户数据 #

bash
# 存储用户数据
set user:1001 0 3600 45
{"id":1001,"name":"John","email":"john@example.com"}
STORED

# 获取用户数据
get user:1001
VALUE user:1001 0 45
{"id":1001,"name":"John","email":"john@example.com"}
END

# 更新用户数据
replace user:1001 0 3600 55
{"id":1001,"name":"John","email":"john@example.com","age":25}
STORED

# 删除用户数据
delete user:1001
DELETED

8.2 缓存Session #

bash
# 存储Session
set session:abc123 0 1800 64
{"user_id":1001,"login_time":1704067200,"ip":"192.168.1.1"}
STORED

# 获取Session
get session:abc123
VALUE session:abc123 0 64
{"user_id":1001,"login_time":1704067200,"ip":"192.168.1.1"}
END

# 更新Session过期时间
touch session:abc123 1800
TOUCHED

# 删除Session
delete session:abc123
DELETED

8.3 计数器应用 #

bash
# 页面访问计数
set page:views:home 0 0 1
0
STORED
incr page:views:home 1
1
incr page:views:home 1
2

# API调用计数
set api:calls:weather 0 86400 1
0
STORED
incr api:calls:weather 1
1

# 限流计数
set rate:user:1001 0 60 1
0
STORED
incr rate:user:1001 1
1

8.4 分布式锁 #

bash
# 获取锁
add lock:resource:1001 0 30 1
1
STORED

# 释放锁
delete lock:resource:1001
DELETED

# 锁已被占用
add lock:resource:1001 0 30 1
1
NOT_STORED

九、性能监控 #

9.1 监控脚本 #

bash
#!/bin/bash
# monitor_memcached.sh

HOST="127.0.0.1"
PORT="11211"

# 获取统计信息
stats=$(echo "stats" | nc $HOST $PORT)

# 解析关键指标
get_hits=$(echo "$stats" | grep "STAT get_hits" | awk '{print $3}')
get_misses=$(echo "$stats" | grep "STAT get_misses" | awk '{print $3}')
curr_connections=$(echo "$stats" | grep "STAT curr_connections" | awk '{print $3}')
bytes=$(echo "$stats" | grep "STAT bytes" | awk '{print $3}')
limit_maxbytes=$(echo "$stats" | grep "STAT limit_maxbytes" | awk '{print $3}')

# 计算命中率
if [ $((get_hits + get_misses)) -gt 0 ]; then
    hit_rate=$(echo "scale=2; $get_hits * 100 / ($get_hits + $get_misses)" | bc)
else
    hit_rate=0
fi

# 计算内存使用率
mem_usage=$(echo "scale=2; $bytes * 100 / $limit_maxbytes" | bc)

# 输出结果
echo "Memcached监控报告"
echo "=================="
echo "命中率: ${hit_rate}%"
echo "当前连接数: $curr_connections"
echo "内存使用率: ${mem_usage}%"
echo "存储字节数: $bytes"

9.2 持续监控 #

bash
# 每秒监控
watch -n 1 'echo "stats" | nc 127.0.0.1 11211 | grep -E "get_hits|get_misses|curr_connections|bytes"'

# 每分钟监控
watch -n 60 'echo "stats" | nc 127.0.0.1 11211'

十、故障排查 #

10.1 连接问题 #

bash
# 检查服务是否运行
ps aux | grep memcached

# 检查端口是否监听
netstat -tlnp | grep 11211

# 测试连接
telnet 127.0.0.1 11211

# 检查防火墙
sudo ufw status
sudo firewall-cmd --list-all

10.2 性能问题 #

bash
# 查看命中率
echo "stats" | nc 127.0.0.1 11211 | grep -E "get_hits|get_misses"

# 查看内存使用
echo "stats" | nc 127.0.0.1 11211 | grep -E "bytes|limit_maxbytes"

# 查看连接数
echo "stats" | nc 127.0.0.1 11211 | grep -E "curr_connections|max_connections"

# 查看Evicted数量
echo "stats items" | nc 127.0.0.1 11211 | grep "evicted"

10.3 内存问题 #

bash
# 查看Slab信息
memcached-tool 127.0.0.1:11211

# 查看数据大小分布
echo "stats sizes" | nc 127.0.0.1 11211

# 查看内存碎片
echo "stats slabs" | nc 127.0.0.1 11211

十一、总结 #

Memcached CLI常用命令:

命令 说明
set 存储数据
get 获取数据
delete 删除数据
incr/decr 计数器操作
stats 查看统计
flush_all 清空数据

下一步,让我们学习Memcached的数据操作命令!

最后更新:2026-03-27