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