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


Posted in PHP onJune 27, 2013

存储命令的格式:
<command name> <key> <flags> <exptime> <bytes>
<data block>
参数说明如下:

set/add/replace
查找关键字
客户机使用它存储关于键值对的额外信息
该数据的存活时间,0表示永远
存储字节数
存储的数据块(可直接理解为key-value结构中的value)
1、添加
(1)、无论如何都存储的setMemcached常用命令以及使用说明详解

这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

可以通过“get 键名”的方式查看添加进去的记录:

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

如你所知,我们也可以通过delete命令删除掉,然后重新添加。

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

(2)、只有数据不存在时进行添加的add

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

(3)、只有数据存在时进行替换的replace

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

 2、删除

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

可以看到,删除已存在的键值和不存在的记录可以返回不同的结果。

二、读取命令1、get

get命令的key可以表示一个或者多个键,键之间以空格隔开

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

可以看到,gets命令比普通的get命令多返回了一个数字(上图中为13)。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。

3、cas
cas即checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。Memcached常用命令以及使用说明详解

三、状态命令1、stats Memcached常用命令以及使用说明详解
2、stats items Memcached常用命令以及使用说明详解
执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

3、stats cachedump slab_id limit_num

我们执行stats cachedump 1 0 命令效果如下:Memcached常用命令以及使用说明详解这里slab_id为1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。Memcached常用命令以及使用说明详解
通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

4、其他stats命令
如stats slabs,stats sizes,stats reset等等使用也比较常见。Memcached常用命令以及使用说明详解

四、其他常见命令
1、append Memcached常用命令以及使用说明详解在现有的缓存数据添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED。

2、prepend
和append非常类似,但它的作用是在现有的缓存数据添加缓存数据。Memcached常用命令以及使用说明详解
3、flush_all Memcached常用命令以及使用说明详解该命令有一个可选的数字参数。它总是执行成功,服务器会发送 “OK\r\n” 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

4、其他命令
memcached还有很多命令,比如对于存储为数字型的可以通过incr/decr命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。

补充一则:简单认识.net framework中的几种缓存

web站点中缓存的重要性毋庸置疑。我想很多asp.net开发人员在开发web应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如分布式缓存memcached、redis等等),而应该是.net framework已经提供的多种缓存解决方案。下面结合自己的开发经验谈谈对.net framework中缓存的认识。

1、System.Web.Caching.Cache
估计大部分做过asp.net开发的人都用过这个命名空间下的缓存,我们可以直接使用HttpContext.Current.Cache实例而不用实例化。当然这个命名空间下的Cache类是允许您实例化的,需要定制自己的缓存系统的当然可以完全自己控制如何初始化这个类。我在园子里看到过有很多文章介绍Cache的CRUD辅助类库大多数都是针对System.Web.Caching.Cache。

需要说明的是,我们还可以通过该命名空间下的HttpRuntime.Cache实现web、控制台、winform等不同表现形式下的缓存,而且完全无需自己实例化。HttpRuntime.Cache是之前个人开发中使用比较多的一个类,现在比较偏爱.net framework4.0中的增强型的缓存类MemoryCache。

2、Output Cache
众所周知,输出缓存主要分页面输出缓存和页面部分缓存。说白了,就是缓存整个页面的html或者部分html,本来没什么值得讨论的,但是最近看到dudu的这篇博客才恍然发现,想不到使用它还真是大有讲究,我以前怎么就没有发现这个问题呢?看来发现问题和解决问题的能力同样重要,有时候前者甚至更重要啊。

3、System.Runtime.Caching
现在个人开发中使用最多的类MemoryCache出自这个命名空间,使用前需要引用using System.Runtime.Caching。MemoryCache继承自ObjectCache, IEnumerable, IDisposable,其中ObjectCache是个抽象类。用过MemoryCache的人都知道,这个MemoryCache有一个属性叫Default,通常可以像下面这样使用:

private static ObjectCache memCache = MemoryCache.Default;当然我们也完全可以通过public MemoryCache(string name, NameValueCollection config = null)构造函数初始化缓存对象。

接着我们可以在web.config文件中配置每个MemoryCache实例运行的内存使用配额方案和配额检查周期,下面示例参考MSDN

  <system.runtime.caching>
    <memoryCache>
      <namedCaches>
        <add name="Default" cacheMemoryLimitMegabytes="10"  pollingInterval="00:02:00"/>
      </namedCaches>
    </memoryCache>
  </system.runtime.caching>

这些配置意义在于可以明确指定每个MemoryCache实例运行的内存使用配额方案和配额检查周期。比如我们可以通过配置来按需更改MemoryCache.Default实例的内存配额(不知道缓存可用最大内存是多少,可能还是传说中的800M左右)。缓存过期策略与其它的缓存框架大同小异,与System.Web.Caching.Cache的不同只是名称不叫CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目录的缓存依赖策略。关于缓存过期策略也比较有探讨的必要,不过个人开发中比较偏重于数据缓存和替换,目前还没有接触和使用过比较完美的过期策略解决方案。
PHP 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
用函数读出数据表内容放入二维数组
Oct 09 PHP
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
php Try Catch异常测试
Mar 01 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
php封装的page分页类完整实例代码
Feb 01 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 #PHP
解析wamp5下虚拟机配置文档
Jun 27 #PHP
解析CI的AJAX分页 另类实现方法
Jun 27 #PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 #PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 #PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 #PHP
Youku 视频绝对地址获取的方法详解
Jun 26 #PHP
You might like
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php头像上传预览实例代码
2017/05/02 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
用Python shell简化开发
2018/08/08 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
计算机专业学生求职信分享
2013/12/15 职场文书
银行开业庆典方案
2014/02/06 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS