Memcache及Telnet命令详解
1. 启动Memcache常用参数
memcached 1.4.3 常用启动参数如下:
| 参数 | 说明 | 默认值 |
|---|---|---|
| -p | 设置TCP端口号 | 11211 |
| -U | UDP监听端口,0时关闭 | 11211 |
| -l | 绑定地址,默认所有都允许 | 0.0.0.0 |
| -d | 独立进程运行(守护进程) | - |
| -u | 绑定使用指定用户运行进程 | - |
| -m | 允许最大内存用量,单位MB | 64 MB |
| -P | 将PID写入文件,需与-d一起使用 | - |
启动示例
Linux下启动:
./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121
Windows下启动:
d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500
Windows下注册为服务后运行:
sc.exe create jb-Memcached binpath= "d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500" start= auto
net start jb-Memcached
2. Telnet连接Memcache
使用telnet连接Memcache服务器:
telnet 127.0.0.1 11211
3. 写入Memcache
3.1 Memcached Telnet Interface 命令表
| 命令 | 说明 | 示例 |
|---|---|---|
| get | 读取数据 | get mykey |
| set | 无条件设置数据 | set mykey 0 60 5 |
| add | 添加新key(key不存在时) | add newkey 0 60 5 |
| replace | 替换已存在的key | replace key 0 60 5 |
| append | 在已存在key后追加数据 | append key 0 60 15 |
| prepend | 在已存在key前添加数据 | prepend key 0 60 15 |
| incr | 数值key增加值 | incr mykey 2 |
| decr | 数值key减少值 | decr mykey 5 |
| delete | 删除已存在的key | delete mykey |
| flush_all | 立即/延迟失效所有缓存 | flush_all [900] |
| stats | 打印统计信息 | stats [slabs|malloc|items|detail|sizes|reset] |
| version | 打印服务器版本 | version |
| verbosity | 增加日志级别 | verbosity |
| quit | 终止telnet会话 | quit |
3.2 Telnet请求命令格式
\r\n
\r\n
参数说明:
:可以是"set"、"add"、"replace" - "set":按照相应的key存储数据,没有则增加,有则覆盖
- "add":按照相应的key添加数据,如果key已存在则操作失败
- "replace":按照相应的key替换数据,如果key不存在则操作失败
:客户端需要保存数据的key :16位无符号整数,与数据一起存储,客户端get时返回 :过期时间,0表示永不过期(但可被LRU等算法替换);非0为unix时间或距离此时的秒数 :需要存储的字节数(不包含最后的\r\n)
3.3 Telnet响应命令
数据发送结束后,服务器返回应答:
- "STORED\r\n":存储成功
- "NOT_STORED\r\n":存储失败(非错误,通常是add/replace条件不满足或该项在删除队列中)
示例:
set key 33 0 4\r\n
ffff\r\n
4. 获取/检查Key-Value
命令格式:
get *\r\n
key*表示一个或多个key(以空格分开)
响应格式:
VALUE \r\n
\r\n
END\r\n
示例:
get aa
VALUE aa 33 4
ffff
END
5. 删除Key-Value
命令格式:
delete
- key:需要被删除数据的key
- time:客户端希望服务器将该数据删除的时间(unix时间或从现在开始的秒数)
6. 检查Memcache服务器状态
命令:
stats
返回的关键状态信息:
| 字段 | 说明 |
|---|---|
| pid | 进程ID |
| uptime | 总运行时间(秒) |
| time | 当前时间 |
| version | 版本号 |
| curr_items | 当前缓存中的KeyValue数量 |
| total_items | 曾经总共经过缓存的KeyValue数量 |
| bytes | 所有缓存使用的内存量 |
| curr_connections | 当前连接数 |
| cmd_get | 总获取次数 |
| cmd_set | 总写入次数 |
| get_hits | 总命中次数 |
| get_misses | 获取失败次数 |
| bytes_read | 总共读取的流量字节数 |
| bytes_written | 总写入流量字节数 |
| limit_maxbytes | 最大允许使用的内存量(字节) |
| evictions | 被LRU算法淘汰的缓存条目数 |
7. 高级缓存细节查看方法
stats reset
stats reset
清空统计数据
stats malloc
stats malloc
显示内存分配数据
stats cachedump
stats cachedump
显示某个slab中的前limit_num个key列表
输出格式:
ITEM key_name [ value_length b; expire_time|access_time s]
- memcached 1.2.2及以前版本:显示访问时间(timestamp)
- 1.2.4以上版本:显示过期时间(timestamp)
- 永不过期的key:expire_time显示为服务器启动时间
stats slabs
stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items
stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)
stats detail
stats detail [on|off|dump]
- on:打开详细操作记录
- off:关闭详细操作记录
- dump:显示详细操作记录(每一个键值的get、set、hit、del次数)
8. 清空所有键值
flush_all
注意:flush_all并不会将items删除,只是将所有items标记为expired,因此这时memcache依旧占用所有内存。
9. 退出
quit
终止telnet会话
10. 性能优化建议
命中率分析
通过stats命令获取的数据,可以计算缓存命中率:
命中率 = get_hits / (get_hits + get_misses) * 100%
内存使用率
内存使用率 = bytes / limit_maxbytes * 100%
监控关键指标
- 命中率:应保持在90%以上,过低说明缓存策略需要优化
- evictions:被LRU淘汰的条目数过多,说明内存不足,需要考虑增加内存
- curr_connections:连接数过多可能影响性能,需要优化连接池配置
- bytes_read/bytes_written:网络流量监控
总结
Memcache是一个高性能的分布式内存对象缓存系统,通过telnet协议可以方便地进行数据操作和状态监控。掌握以上命令对于日常运维和性能调优非常重要。在实际使用中,建议通过监控脚本定期检查服务状态,及时发现和解决潜在问题。

发表评论 取消回复