`

memcached 命令简单介绍

    博客分类:
  • java
 
阅读更多

原文参考 :http://elf8848.iteye.com/blog/2093463

 

一、协议

        memcached的客户端使用TCP连接同memcached进行交互,memcached服务器监听指定的端口(默认端口是11211)。Client连接到memcached服务器,发送指令,获取数据,然后关闭连接。

        通常没有必要发送任何命令来关闭某个会话。客户端可以在任何时候关闭不需要的连接。然而,通常鼓励客户端缓存这些连接,因为memcached服务器本 身就被设计成为一个可以支持成百上千个连接的服务器,而客户端缓存了连接后,就可以避免重复的建立连接的开销。

        memcached协议中包含两部分数据,文本行和非结构化数据。前者是来自客户端的命令或来自服务器端的响应,后者代表客户端存取的数据。命令以\r\n结尾,数据可以是\r,\n或者\r\n结尾来标识各自部分的结束。

二、键

        memcached一般通过key来存储,一个key的长度一般不能超过250字符。key不能包含控制字符或空白字符

三、命令

有三种类型的命令:

    1、存储命令:set、add、replace、append、prepend、cas

    2、读取命令:get、gets

    3、第三种命令,不涉及到非结构化数据。客户端发出这样的命令,服务端会返回响应结果

1、过期时间

        过期时间的取值,有两种:一种是Unix时间(自1970.1.1开始到现在的秒数),另一种是相对当前时间的秒数。如果过期时间的秒数大于60*60*24*30(即30天),则服务端认为是Unix时间。

2、错误设置

        客户端发出的每个命令,服务端可能会返回错误提示字符。错误提示字符有如下三种:

      1)  ERROR\r\n :表示客户端发送的命令不存在

      2)  CLIENT_ERROR <error>\r\n :表示客户端的输入有错误

      3)  SERVER_ERROR <error>\r\n :服务器端的错误

3、存储命令:

命令格式:<command name> <key><flags> <exptime> <bytes> [noreply]\r\n

命令名:如set、add、replace、append、prepend

命令名称

作用

set

存储这个数据

add

存储这个数据,当且仅当这个key不存在的时候

replace

存储这个数据,当且仅当这个key存在

append

将数据存放在已存在的key对应的内容的后面,忽略<flags>和<exptime>

prepend

将数据存放在已存在的key对应的内容的前面,忽略<flags>和<exptime>

cas

存储这个数据,当且仅当该数据自从最后被获取到现在没有被更新

flags:一个任意的32位(旧版本是16位)无符号整数

exptime:过期时间,如果为0,表示永不过期。单位秒

bytes:表示将要存储的数据的字节数,可以为0。要存储的内容的字节数,必须等于该值,不能大于也不能小于。

例子:将一个整数12,存放到memcache中,key为var,flags为1,过期时间为1000,字节数为2

用telnet连接memcached服务器端:

输入命令如下:set var 1 1000 2,然后按回车,之后输入要存储是数据:12,按回车,服务器返回STORED,如下:

通过get命令查看刚才存储的内容:

4、获取命令

格式:

      get  <key>*\r\n

      gets <key>*\r\n

<key>*,表示可以有多个key,各个key之间用空格隔开。

执行该命令,服务器返回0个或多个item,每个item的格式如下:

      VALUE <key> <flags><bytes> [<cas unique>]\r\n

      <data block>\r\n

bytes为数据内容的长度,data block为key对应的数据内容

例子:

5、删除命令

格式: delete <key> [noreply]\r\n

noreply参数,告诉服务器不用发送响应

该命令的返回结果,可能是:

       DELETE\r\n       表示删除成功

       NOT_FOUND\r\n   没有对应的key

例子:

6、增加/减少命令

命令格式:

       incr <key> <value> [noreply]\r\n   或   decr <key> <value> [noreply]\r\n

value为要增加或减少的值。

操作成功,服务器返回操作之后的值。

对于decr操作,如果操作之后的值小于0,则置为0

不能直接使用incr和decr,必须先set或者add后再使用,而且值为数字类型,在增加时,存储的区域会扩展。

例子:

7、touch

该命令用来更新已存在的item的过期时间,格式如下:(低版本不支持该命令)

      touch <key> <exptime> [noreply]\r\n

执行该命令后,如果返回”TOUCHED\r\n”,则执行成功

8、统计命令

命令格式:

    1)    stats\r\n         查看通用的统计信息

    2)    stats <args>\r\n

通用统计信息,例子:

具体含义:

名称

类型

含义

pid

32u (32位无符号整数)

memcached server的pid

uptime

32u

memcached server自启动到现在的时间(秒)

time

32u

当前UNIX的时间

version

string

memcached server的版本号

pointer_size

32

操作系统默认的指针大小

curr_items

32u

当前存储的item数目

total_items

32u

server从启动到现在,总共累计存储的item数目

bytes

64u

当前存储item所花费的字节数

curr_connections

32u

当前的客户端连接数

total_connections

32u

server从启动到现在,累计的客户端连接数

connection_structures

32u

server分配的连接结构数

cmd_get

64u

get的次数

cmd_set

64u

set的次数

get_hits

64u

get命中的次数

get_misses

64u

get没有命中,miss的次数

evictions

64u

为新的item释放内存空间而被移除的有效item的数目。如果cache的size比较小,则淘汰策略经常发生

bytes_read

64u

从cache中读取的总字节数

bytes_written

64u

写入cache的总字节数

limit_maxbytes

32u

该memcached server分配的最大内存数量

 

9、item统计信息

stats命令后面带上参数:items。  返回存储在每个slab的item信息,格式如下:

       STAT items:<slabclass>:<stat><value>\r\n

例子:

10、itemsize统计信息

stats命令后面带上参数sizes,返回存储在cache中的总体大小及item数目。

注意:该命令会锁住cache,它会遍历每个item并计算大小,在此之间,我们是无法访问server的,因此要慎重使用该命令。

返回结果的格式如下:

     <size> <count>\r\n

其中:

     'size' is an approximate size of the item,within 32 bytes.

     'count' is the amount of items that existwithin that 32-byte range.

例子:

11、slab统计信息

stats命令带上参数slabs,返回memcached运行期间创建的每个slab的信息。

数据格式:STAT <slabclass>:<stat> <value>\r\n

例子:

名称

含义

chunk_size

每个块的大小。一个item使用一个大小适当的块。

chunks_per_page

一页的块数,一页的默认大小小于等于1M,,chunks_per_page * chunk_size = 1MB。 slab按页分配,每页划分成不同的块

total_pages

分配给slab的页数

total_chunks

分配给slab的块数

used_chunks

已分配给item的块数

free_chunks

未分配给item的块数

free_chunks_end

目前可以使用的块数

mem_requested

请求存储在该slab的字节数

active_slabs

已经分配的slab数量

total_malloced

已经分配给slab的字节数

item存放在slab中,该slab的大小大于或等于该item的大小。mem_requested表示一个slab中所有item的大小。

total_chunks * chunk_size – mem_requested,表示一个slab中所浪费的内存大小。如果有很多浪费,则需要考虑调整slab因子

12、其他命令

     1)   flush_all :执行该命令,将导致memcache中所存在的所有item都失效。也可以指定在一段时间之后失效。例子:

    2)   version : 查看memcache的版本号

    3)quit :关闭连接

分享到:
评论

相关推荐

    29道memcached面试题含答案(很全)

    它使用一个名为transport-memcached的插件提供Memcached命令映射到REST接口的功能,使得Memcached命令可以被同样的REST层处理。 Memcached支持的命令包括get、set、delete和quit等。其中,get命令用于获取存储在...

    memcached1

    先简单的介绍下什么是memcached。 Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每...

    Memcached常用命令以及使用说明详解

    存储命令的格式:&lt;command&gt; &lt;key&gt; &lt;flags&gt; &lt;exptime&gt; &lt;bytes&gt;&lt;data&gt;参数说明如下: set/add/replace 查找关键字 ...客户机使用它存储关于键值对的额外信息 ...存储的数据块(可直接...set命令不但可以简单添加,如果

    探讨:如何通过stats命令分析Memcached的内部状态

    Memcached有个stats命令,通过它可以查看Memcached服务的许多状态信息。使用方法如下:先在命令行直接输入telnet 主机名端口号,连接到memcached服务器,然后再连接成功后,输入stats 命令,即可显示当前memcached...

    cl-memcached:Memcached 对象缓存系统的快速、线程安全接口

    CL-内存缓存CL-MEMCACHED 是一个简单、快速且线程安全的库,用于与对象缓存系统交互。 它实现了 Memcached TEXT 协议。 根据主页: memcached是一种高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻...

    Windows下安装Memcached的步骤说明

    (其实在Windows下安装还是比较简单的) 源码包准备: 1,memcached 1.2.1 for Win32 binaries 这个是 Win32 服务器端的 memcached 最新版本,直接下载就可以了; 2,php_memcache-5.2-Win32-vc6-x86-20090408.zip ...

    Memcahed协议简单实现代码

    一个在linux下实现Memcached命令的例子,用C++实现,并利用了libevent.

    MySQL中InnoDB的Memcached插件的使用教程

    我们选择从源代码安装MySQL,需要注意的是早期的版本有内存泄漏,所以推荐安装最新的稳定版,截至本文发稿时为止,最新的稳定版是5.6.13,我们就以此为例来说明,过程很简单,只要激活了WITH_INNODB_MEMCACHED即可:...

    mccli:简单的CLI实用程序,用于将一次性命令发送到Memcached实例

    一个简单的CLI实用程序,用于向Memcached服务器发出一次性命令 用法 Usage: mccli [-s server_ip] COMMAND Options: -s, --server Server address to connect to [default: "127.0.0.1"] -h, --help Show help ...

    Redis和Memcached的区别详解

    Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: 1.Redis支持服务器端的数据操作:...2.内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采

    转载+整合 64位系统+ php 5.5 memcache 安装教程 及下载

    其实很简单,memcache是php的一个扩展,用于php管理memcached,php-memcache.dll。 如果安装了memcached不安装扩展,那么php无法操控memcached,但是命令行使用起来没有问题 如果安装了memcache扩展但是没有...

    Redis 对比 Memcached 并在 CentOS 下进行安装配置详解

    Redis 是一个开源、支持网络、基于内存、键值对的 Key-Value 数据库,本篇文章主要介绍了Redis 对比 Memcached 并在 CentOS 下进行安装配置详解,有兴趣的可以了解一下。 了解一下 Redis Redis 是一个开源、支持网络...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    3.1.4 Memcached的简单使用过程 3.2 剖析Memcached的工作原理 3.2.1 Memcached的工作过程 3.2.2 Slab Allocation的工作机制 3.2.3 Memcached的删除机制 3.2.4 Memcached的分布式算法 3.3 Memcached的...

    Shell脚本实现memcache缓存命中率监控

    公司有几个服务器开着多个...这个脚本比较简单,通过check_tcp脚本获取memcached的stats信息。然后将该信息格式化成一个字符串,然后将get_hits比上cmd_gets就能得到缓存命中率。基础原理比较简单。但是还要实现nagi

    Redis总结笔记(一):安装和常用命令

    一、redis简单介绍 redis是NoSql家族的一员,键值对的内存型数据库。但是它支持把数据保存到本地。这点比memcached好。 缺点: 没有本地数据缓冲, 目前还没有完整的数据聚集化支持 优点: 配置简单, 使用方便, 高性能,...

    redis-desktop-manager-0.8.8.384.zip

    Redis做为现在web应用开发的黄金搭担...Redis还支持subscribe/publish命令,可以用于简单的消息发送与订阅;Redis 3.0开始支持集群服务;Redis也可以把数据库持久化,但是在大多数情况Redis的竞争力是提供缓存服务。

    实战Nginx高性能Web服务器

    内容:概述Nginx的背景知识和简单的入门实例。 2、高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“Hello World” 内容:简述Nginx的基本配置项,并提供Nginx的基本部署方法和Hello World测试...

    C# memcache 使用介绍

    简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。memcache基于一个存储键/值对的hashmap进行存储对象到内存中。memcache是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议...

    Redis的图形界面管理工具-Redis Desktop Manager

    Redis Desktop Manager,简称rdm,是一款可以跨平台的redis可视化工具,该工具可以说很大程度上弥补了memcached这类key/value存储的不足,为Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、...

Global site tag (gtag.js) - Google Analytics