Memcache及Telnet命令详解

1. 启动Memcache常用参数

memcached 1.4.3 常用启动参数如下:

参数 说明 默认值
-p 设置TCP端口号11211
-U UDP监听端口,0时关闭11211
-l 绑定地址,默认所有都允许0.0.0.0
-d独立进程运行(守护进程)-
-u 绑定使用指定用户运行进程-
-m 允许最大内存用量,单位MB64 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替换已存在的keyreplace 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删除已存在的keydelete 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协议可以方便地进行数据操作和状态监控。掌握以上命令对于日常运维和性能调优非常重要。在实际使用中,建议通过监控脚本定期检查服务状态,及时发现和解决潜在问题。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部