Command Description Example
get 读取键值 get mykey
set 设置新键值 set mykey 0 60 5
add 新增键值 add newkey 0 60 5
replace 替换现有值 replace key 0 60 5
append 末尾添加值 append key 0 60 15
prepend 头部添加值 prepend key 0 60 15
incr 递增数值 incr mykey 2
decr 递减数值 decr mykey 5
delete 删除键 delete mykey
flush_all 清除所有数据 flush_all
清除n秒内的数据 flush_all 900
stats 打印所有状态信息 stats
打印内存信息 stats slabs
打印内存信息 stats malloc
高级信息 stats items
  stats detail
  stats sizes
重置状态 stats reset
version 打印服务器(memcached)版本 version
verbosity 日志级别 verbosity
quit 退出telnet控制台 quit

1.telnet请求命令格式

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
a) <command name> 可以是”set”, “add”, “replace”。
“set”表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖。
“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败

b) <key> 客户端需要保存数据的key。

c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和需要存储的数据一起存储,并在客户端get数据时返回。
客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。

d) <exptime> 过期的时间。
若为0表示存储的数据永远不过时(但可被服务器算法:LRU 等替换)。
如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。

e) <bytes> 需要存储的字节数(不包含最后的”\r\n”),当用户希望存储空数据时,<bytes>可以为0

f) 最后客户端需要加上”\r\n”作为”命令头”的结束标志。
<data block>\r\n

紧接着”命令头”结束之后就要发送数据块(即希望存储的数据内容),最后加上”\r\n”作为此次通讯的结束。

2. telnet响应命令

结果响应:reply
当以上数据发送结束之后,服务器将返回一个应答。可能有如下的情况:

a) “STORED\r\n”:表示存储成功
b) “NOT_STORED\r\n” : 表示存储失败,但是该失败不是由于错误。
通常这是由于”add”或者”replace”命令本身的要求所引起的,或者该项在删除队列之中。

如: set key 33 0 4\r\n
ffff\r\n

3.获取/检查KeyValue
get <key>*\r\n
a) <key>* 表示一个或者多个key(以空格分开)
b) “\r\n” 命令头的结束

结果响应:reply
服务器端将返回0个或者多个的数据项。每个数据项都是由一个文本行和一个数据块组成。当所有的数据项都接收完毕将收到”END\r\n”
每一项的数据结构:
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n

a) <key> 希望得到存储数据的key
b) <falg> 发送set命令时设置的标志项
c) <bytes> 发送数据块的长度(不包含”\r\n”)
d) “\r\n” 文本行的结束标志
e) <data block> 希望接收的数据项。
f) “\r\n” 接收一个数据项的结束标志。

如果有些key出现在get命令行中但是没有返回相应的数据,这意味着服务器中不存在这些项,这些项过时了,或者被删除了
如:get aa
VALUE aa 33 4
ffff
END

4.删除KeyValue:
delete <key> <time>\r\n

a) <key> 需要被删除数据的key
b) <time> 客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)
c) “\r\n” 命令头的结束

5.检查Memcache服务器状态:
stats\r\n
在这里可以看到memcache的获取次数,当前连接数,写入次数,已经命中率等;

pid : 进程id
uptime :总的运行时间,秒数
time : 当前时间
version : 版本号
……
curr_items : 当前缓存中的KeyValue数量
total_items : 曾经总共经过缓存的KeyValue数量
bytes : 所有的缓存使用的内存量
curr_connections 当前连接数
….
cmd_get : 总获取次数
cmd_set : 总的写入次数
get_hits : 总的命中次数
miss_hits :  获取失败次数
…..
bytes_read : 总共读取的流量字节数
bytes_written : 总的写入流量字节
limit_maxbytes : 最大允许使用的内存量,字节

6.高级缓存细节查看方法:
stats reset
清空统计数据

stats malloc
显示内存分配数据

stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是  访问时间(timestamp)
1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间

stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]

stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)

stats detail [on|off|dump]
设置或者显示详细操作记录

参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)

7.清空所有键值
flush_all
注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。

8、退出
quit\r\n

memcache telnet 维护小结

memcache作为一款优秀的进程外缓存,常常被运用于高并发系统架构中。这里主要谈谈怎么通过telnet工具,查看memcache运行状况并对其key进行管理维护。假设memcache安装目录:/usr/local/memcached

1、启动memcache

[root@localhost ~]# /usr/local/memcached/bin/memcached -d -m 512  -u root -l 192.168.119.70 -p 12000 -c 512 -P /usr/local/memcached/memcached.pid

启动参数详解
 -d:以守护进程方式启动。如果该参数没有指定,当按ctrl+c命令结束,memcache自动关闭
 -m:分配给memcache使用的最大内存数 单位是m,默认是64m
 -u: 指定运行memcache的用户
 -l: 指定监听的ip地址
 -p: 指定监听的tcp端口号,可以通过-u指定udp端口.默认是11211
 -c: 最大并发连接数
 -P: 报错进程id的文件
 memcache 启动之后,我们就可以通过telnet连接memcache,对其进行简单操作管理。

2、telnet连接memcache

[root@localhost ~]# telnet 192.168.119.70 12000
Trying 192.168.119.70...
Connected to 192.168.119.70 (192.168.119.70).
Escape character is '^]'.

连接成功之后,即可对memcache进行操作管理了,常用的命令有:

Ⅰ、添加修改

命令格式:<command> <key> <flags> <exptime> <bytes>\r\n<data block>\r\n

<command>:add, set或 replace

<key> :缓存的名字

<flag>:16位无符号整数,和key要存储的数据一起存储,并在程序get缓存时,返回。

<exptime>:过去时间,0 表示永远不过期,如果非零,表示unix时间或距此秒数

<bytes>:存储数据的字节数

\r\n: 表示换行回车

命令结果:

STORED :表示成功

NOT_STORED : 表示失败

a)、添加缓存

add id 1 0 4
1234
STORED

如果key已经存在,则会添加失败。

b)、修改缓存

replace id 1 0 4
3456
STORED

key存在时,成功;不存在时,失败。

c)、设置缓存

set id 1 0 4
2345
STORED

key不存在时,添加【add】;已存在时,替换【replace】。

Ⅱ、读取

命令格式:get <key>+\r\n

<key>+:表示一个或多个key,多个key时,用空格隔开

a)、读取单个key的缓存

get id
VALUE id 1 4
1234
END

b)、读取多个key的缓存

get id name
VALUE id 1 4
3456
VALUE name 1 3
jim
END

Ⅲ、删除

命令格式:delete <key> \r\n

<key>:要删除的key

删除id

delete id
DELETED

Ⅳ、清空所有缓存

命令格式:flush_all

flush_all
OK

Ⅴ、查看缓存服务器状态

命令:stats

stats
STAT pid 2711 //进程id
STAT uptime 2453 //总的运行时间,单位描述
STAT time 1344856333 //当前时间
STAT version 1.4.0 //版本
STAT pointer_size 32 //服务器指针位数,一般32位操作系统是32
STAT rusage_user 0.002999 //进程的累计用户时间
STAT rusage_system 1.277805 //进程的累计系统事件
STAT curr_connections 1 //当前连接数
STAT total_connections 11 //服务器启动后,总连接数
STAT connection_structures 11 //连接结构的数量
STAT cmd_get 17 //总获取次数
STAT cmd_set 1 //总写入次数
STAT cmd_flush 1 //总的的清空次数
STAT get_hits 1 //总的命中次数
STAT get_misses 7 //获取没有命中次数
STAT delete_misses //删除没有命中次数
STAT delete_hits 4 //删除命中次数
STAT incr_misses //递增操作没有命中次数
STAT incr_hits //递增操作命中次数
STAT decr_misses //递减操作没有命中的次数
STAT decr_hits //递减操作命中的次数
STAT cas_misses //cas设置没有命中次数
STAT cas_hits //cas命中次数
STAT cas_badval //cas操作找到key,但版本过期,没有设置成功
STAT bytes_read 455 //总共获取数据量
STAT bytes_written 1175 //总共写入数据量
STAT limit_maxbytes 1048576 //最大允许使用内存,单位字节
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 5 //当前线程数
STAT conn_yields 0
STAT bytes 56 //已用缓存空间
STAT curr_items 1 //当前缓存的keyvalue数
STAT total_items 7 //总共缓存的keyvalue数,包括过期删除的
STAT evictions //通过删除keyvalue,释放内存次数
END

Ⅵ、打印版本

命令:version

version
VERSION 1.4.0

Ⅶ、打印内存信息

命令:stats slabs

stats slabs
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 1
STAT 1:free_chunks 1
STAT 1:free_chunks_end 13105
STAT 1:get_hits 10
STAT 1:cmd_set 10
STAT 1:delete_hits 4
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT active_slabs 1
STAT total_malloced 1048560
END

3、退出telnet

quit

memcached telnet相关操作

elnet localhost 11211
//保存
set good 32 0 10
helloworld
STORED

//取回
gets good
VALUE good 32 10 10
helloworld
END

//替换
replace good 32 0 10
worldhello
STORED
get good
VALUE good 32 10
worldhello
END

//尾部添加
append good 32 0 5
after
STORED
get good
VALUE good 32 15
worldhelloafter
END

//头部添加
prepend good 32 0 6
before
STORED
get good
VALUE good 32 21
beforeworldhelloafter
END

//删除
delete good
DELETED
get good
END

delete good
NOT_FOUND

cas good 32 0 10 hel
helloworld
EXISTS

gets good
VALUE good 32 10 10
helloworld
END

cas bad 32 0 10 good
worldhello
NOT_FOUND

参考文章:

memcache在telnet下的命令操作

memcache telnet 维护总结

memcache telnet 使用命令

memcached全面剖析–PDF总结篇   *值得多次阅读

关于Memcached的一些事之memcached特征

Memcached二三事儿

查看、分析memcached使用状态

memcache常用操作的更多相关文章

  1. python memcache 常用操作

    add() 添加一条键值对,如果key已存在,重复执行add操作会报异常 mc.add('name2', 'lisi') print(mc.get('name2')) # lisi replace 修 ...

  2. Linux常用操作练习

    Linux常用操作练习 练习一:安装CentOS 1.设置为1G内存(才有图形界面).10G硬盘 2.分给交换分区2G(4G一下2G,8G-32G分4G-8G) 练习二:安装CentOS迷你版 1.安 ...

  3. php缓存技术——memcache常用函数详解

    php缓存技术——memcache常用函数详解 2016-04-07 aileen PHP编程 Memcache函数库是在PECL(PHP Extension Community Library)中, ...

  4. 【三】用Markdown写blog的常用操作

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  5. php模拟数据库常用操作效果

    test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...

  6. Mac OS X常用操作入门指南

    前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右)            =鼠标左键 control+按下        ...

  7. mysql常用操作语句

    mysql常用操作语句 1.mysql -u root -p   2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...

  8. nodejs配置及cmd常用操作

    一.cmd常用操作 1.返回根目录cd\ 2.返回上层目录cd .. 3.查找当前目录下的所有文件dir 4.查找下层目录cd window 二.nodejs配置 Node.js安装包及源码下载地址为 ...

  9. Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理

    摘要:Oracle数据库的库表常用操作:创建与添加表空间.临时表空间.创建表分区.创建索引.锁表处理 1.表空间 ■  详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间 --详细查看表空 ...

随机推荐

  1. mysql优化的理解(转载)

    当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这 ...

  2. rabbitmq一个连接多个信道channel

    https://www.cnblogs.com/eleven24/p/10326718.html

  3. 常用的外网yum源之epel.repo

    [epel]name=Extra Packages for Enterprise Linux 6 - $basearchbaseurl=http://download.fedoraproject.or ...

  4. sql对表的操作

    --insert into pppcopy select * from ppp //从表ppp中获取数据,并将其插入到pppcopy中,只拷贝表的数据,不拷贝表的结构(前提:表pppcopy1存在) ...

  5. OpenLayers学习笔记(十二)— 飞机速度矢量线预测(二)

    根据计算公式实现预测线 作者:狐狸家的鱼 GitHub:八至 之前有一篇博客简单写了一个模拟demo,根据物体当前的速度和方向预测多少时间后所在的位置,具体计算是参考<(译)计算距离.方位以及更 ...

  6. 手写Spring事务框架

    Spring事务基于AOP环绕通知和异常通知 编程事务 声明事务 Spring事务底层使用编程事务+AOP进行包装的   = 声明事务 AOP应用场景:  事务 权限 参数验证 什么是AOP技术 AO ...

  7. Flink(一)集群配置

    三台主机 centos6 已经完成的工作: 防火墙已关闭 主机名修改完毕,ssh免密登陆配置完成 jdk已安装 zookeeper已经部署并运行 hadoop已经部署并运行 版本:flink-1.8. ...

  8. 【CSS】position(定位)属性

    关于CSS position,来自MDN的描述: CSS position属性用于指定一个元素在文档中的定位方式.top.right.bottom.left 属性则决定了该元素的最终位置. 然后来看看 ...

  9. Delphi RegisterHotKey 设置系统热键

    Symbolic constant name Value (hexadecimal) Keyboard (or mouse) equivalent VK_LBUTTON 01 Left mouse b ...

  10. [CSP-S模拟测试]:金(king)(高精度+模拟)

    题目传送门(内部题36) 输入格式 第一行一个整数$T$,表示数据组数. 接下来$T$行,每行两个空格隔开的整数$n,m$. 输出格式 对于每组数据,输出一行$"Yes"$或$&q ...