4.协议简介

  • Memcached服务与各客户端间通过Tcp链接通讯(也可通过Udp链接)。

   各客户端间与服务间不需要发送特别的命令关闭链接,只要在不需要的时候直接关闭链接即可。建议客户端与服务间保持长连接,否则就失去了Memcached的优势,毕竟每次使用时再链接还是比较耗时的。

  • Memcached现主要有两种协议方式,文本协议、二进制流协议。

   Memcached早期使用的是简单的文本协议,后来扩展了二进制流协议(文本解析耗费较多时间),在统一的协议格式下,原来很多的文本都约定为某些特定字节,如set关键字我可约定为01表示等待。

   Memcached现在的键长最多为250字节,且当中不能含有空格和其他特殊的控制字符如tab、回车等。

  • 命令

   大类主要分为三种:保存命令、获取命令、其他命令。命令都是小写且大小写敏感。

  • 超时时间

   有些命令操作时会添加超时时间参数,参数的值一般有两种,一是绝对时间值,Unix时间(1970.1.1开始计时的,32位整数表示),另一种是相对时间值即从当前时间开始计的秒数。

   但后一种方式的超时时间值不能超过60*60*24*30(即30天),如果超过这个值,则会被当做是绝对时间值。

5.常用命令

  以下命令示例都是以通过telnet链接Memcached方式演示.

  • 保存数据

  命令格式:

    <command name> <key> <flags> <exptime> <bytes> [noreply]\r\n、

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

    • add       仅当存储空间中不存在键相同的数据时才保存
    • replace      仅当存储空间中存在键相同的数据时才保存
    • set            与add和replace不同,无论何时都保存
    • append  向已存在键的对应值后追加数据
    • prepend   向已存在键的对应值前加入数据     

    append与prepend操作不接受flags或exptime参数

    cas (check and set)它是一个检查并设置的操作,对本次数据存储的前提是从上次取过数据以后没有被修改过。

        

  • 获取数据
    • get <key>*\r\n
    • gets <key>*\r\n

    这两个命令的唯一区别是,gets会比get多返回一个用于标识cas操作的。

     示例:

       存入键位"name",值为"jadic"的操作命令

        set name 0 0 5

        jadic

       服务端响应

           stored

       现想取出name的值,操作命令

        get name

       服务端响应

        VALUE name 0 5

        jadic

          END

       如果通过gets命令操作,

        gets name

       服务端响应

        VALUE name 0 5 2

        jadic

        END

       可以看到gets命令返回的操作比get命令多返回了一个2,这个2就是set name操作时memcached自动生成的一个用于4字节长的数字,可通过gets命令获取,这个值

       可用于cas 操作,如现在有如下操作:

        cas name 0 0 6 2

          jadic2

      服务端响应

        stored

      上述的这个cas操作就表示,现在要把name的内容改为jadic2,但成功的前提是从上次gets name内容后,这个内容没有被修改过,其中cas命令行中最后的2即是

      gets操作时返回的值。

  • 删除数据
    • delete <key> [noreply]\r\n   根据key值从memcached中删除键值对数据
    • flush_all                          将memcached中所有键值对都删除
  • 增值、减值操作

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

    这两个操作成功的前提都是key所对应的值存入的是4字节的数字,否则都会返回失败提示,如下示例:

set id 0 0 5 //设置id的内容为12345

12345

STORED

incr id 4  //id增加4

12349   //服务端直接返回增加后的值

decr id 3   //id的值减去3 

12346    //同样,直接返回减值操作以后的值

set name 0 0 3  //name值内容为"ab1"

ab1

STORED

incr name 1    //执行加1操作,因为值内容不是数字型,所以服务端直接返回错误提示

CLIENT_ERROR cannot increment or decrement non-numeric value

decr name 2    //与增值操作一样,因为值内容不是数字型,所以服务端直接返回错误提示

CLIENT_ERROR cannot increment or decrement non-numeric value

incr abc 1    //因为缓存中没有键为abc的条目,所以会提示未找到,decr同理。

NOT_FOUND

  • Touch

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

    touch指令用于更新已有条目的超时时间,而不需要取出该条目的内容,其中的exptime的意义与保存命令操作的exptime参数一样

Memcached学习(二)的更多相关文章

  1. Memcached 学习笔记(二)——ruby调用

    Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...

  2. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  3. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  4. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  5. memcached 学习 1—— memcached+spring配置

    memcached 学习目录: memcached 学习 1—— memcached+spring配置 这几天自己搭建项目环境,解决问题如下: 有关常见的配置这里没有列出,中间遇到的搭建问题比较顺利g ...

  6. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  7. memcached学习笔记——存储命令源码分析下篇

    上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...

  8. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

  9. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

随机推荐

  1. HibernateDaoSupport的使用

    1.HibernateDaoSupport是有spring提供的一个hibernate模版工具类,或不多说,直接上代码 接口 IGenericDao.java package org.hibernat ...

  2. ALT(预警)

    1. Alert简介 Alert是一种Oracle系统中的一种机制,它可以监视系统数据库,在规定的情况下给规定用户一个通知,通知可以是邮件或者其他形式,在标注的系统和客户化系统中都是可以定义使用的 2 ...

  3. 亦步亦趋在CentOS 6.4下安装Oracle 11gR2(x64)

    安装前须知: 内存(RAM)的最小要求是 1GB,建议 2GB 及以上. 虚拟内存 swap 建议:内存为 1GB~2GB 时建议swap大小为内存大小的 1.5 倍:内存为 2GB~16GB 时建议 ...

  4. JavaWeb学习篇之----容器Response详解

    今天在来看一下Response容器的相关知识,其实这篇blog早就应该编写了,只是最近有点忙,所以被中断了.下面我们就来看一下Response容器的相关知识吧.Response和我们即将在后面说到的R ...

  5. VHD更新命令(打补丁)

    DISM 查看vhd文件信息:dism /get-imageinfo /imagefile:e:\vhd\win2008r2.vhdxdism /get-imageinfo /imagefile:e: ...

  6. java中需要关注的3大方面内容/Java中创建对象的几种方法:

    1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...

  7. Galera 10.0.20 on CentOS 6.6

    Galera 10.0.20 on CentOS 6.6 0.使用场景 数据库软件:mariadb-galera-10.0.20-linux-x86_64.tar.gz 集群管理:galera-3-2 ...

  8. Codeforces Round #326 (Div. 2) A. Duff and Meat 水题

    A. Duff and Meat Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/probl ...

  9. C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母

    首先下载Visual Studio International Pack 1.0,官方下载地址:http://www.microsoft.com/downloads/zh-cn/details.asp ...

  10. C# WinForm 上传图片,文件到服务器的方法Uploader.ashx

    网上有很多方案,起初用时,因为对asp.net不太了解,觉得FTP实现不错,可是后来发现,如果机器在域控下,就会有问题. 一年过去了,asp.net也熟悉了,知道ajax没事应该用ashx,验证码也用 ...