Memcached学习(二)
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学习(二)的更多相关文章
- Memcached 学习笔记(二)——ruby调用
Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- memcached 学习 1—— memcached+spring配置
memcached 学习目录: memcached 学习 1—— memcached+spring配置 这几天自己搭建项目环境,解决问题如下: 有关常见的配置这里没有列出,中间遇到的搭建问题比较顺利g ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- memcached学习笔记——存储命令源码分析下篇
上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...
- memcached学习笔记——存储命令源码分析上篇
原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
随机推荐
- Java系的大网站架构-LinkedIn和淘宝
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Codeforces Round #185 (Div. 2) B. Archer 水题
B. Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/problem/B D ...
- Codeforces Round #329 (Div. 2) D. Happy Tree Party 树链剖分
D. Happy Tree Party Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/593/p ...
- Linux - 打印文件夹全部文件 代码(C)
列出文件夹全部文件 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 首先配置环境,參考:http://blog.csdn.net/caroline_wen ...
- 第29题:推断一个序列是否是还有一个push序列的pop序列
github:https://github.com/frank-cq/MyTest 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序.为了简单 ...
- iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储
使用Core Data进行数据持久化存储 一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...
- iOS开发——实用篇Swift篇&状态栏操作
状态栏操作 在Swift开发过程中,针对状态栏操作的过程有很多. 1.在ViewController中操作当前ViewController的状态栏 /** 隐藏状态栏 */ override func ...
- EasyBCD 2.2中文版安装变色龙wowpc.iso详细教程(适用各个版本)
第一章 安装变色龙引导本章节提供3种安装方案,请自行选择 1.使用 Windows 版变色龙安装器安装适用引导方案:BIOS+MBR第1步:下载 Chameleon Install 2.2svn228 ...
- Xcode无法设置视图的 autosizing control原因
转自:Xcode无法设置视图的 autosizing control原因 学习Xcode的iOS编程时,可能会发现Autosizing Control不见了,其原因很简单,因为你在设置中选择了Auto ...
- 申请TexturePacker 或 PhysicsEditor free licenses
有一个跟开发有关的blog,就可以去 http://www.codeandweb.com/request-free-license 申请一个free licenses. 可以申请TexturePack ...