Memcached常用下令及运用注明
一、存储下令
存储下令的格局:
<command name> <key> <flags> <exptime> <bytes>
<data block>
参数注明如下:
<command name> | set/add/replace |
<key> | 查找要害字 |
<flags> | 客户机运用它存储对于键值对的额外信息 |
<exptime> | 该数据的存活工夫,0表示永远 |
<bytes> | 存储字节数 |
<data block> | 存储的数据块(可直接了解为key-value构造中的value) |
1、增加
(1)、不管怎样都存储的set
这个set的下令在memcached中的运用频率极高。set下令不光可以简略增加,要是set的key已经存在,该下令可以更新该key所对应的本来的数据,也就是实现更新的作用。
可以通过“get 键名”的方式查看增加进去的记载:
如你所知,我们也可以通过delete下令删除掉,然后从新增加。
(2)、只要数据不存在时进行增加的add
(3)、只要数据存在时进行替代的replace
2、删除
可以看到,删除已存在的键值和不存在的记载可以返回不一样的效果。
二、读取下令
1、get
get下令的key可以表示一个或者多个键,键之间以空格隔开
2、gets
可以看到,gets下令比普通的get下令多返回了一个数字(上图中为13)。这个数字可以检查数据是否产生转变。当key对应的数据转变时,这个多返回的数字也会转变。
3、cas
cas即checked and set的意思,只要当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。
三、状态下令
1、stats
2、stats items
施行stats items,可以看到STAT items行,要是memcached存储内容许多,那么这里也会列出许多的STAT items行。
3、stats cachedump slab_id limit_num
我们施行stats cachedump 1 0 下令结果如下:
这里slab_id为1,是由2中的stats items返回的效果(STAT items背面的数字)决议的;limit_num看起来宛如是返回多少条记载,猜的一点不错, 不过0表示显示出所有记载,而n(n>0)就表示显示n条记载,要是n超过该slab下的所有记载,则效果和0返回的效果一致。
通过stats items、stats cachedump slab_id limit_num配合get下令可以遍历memcached的记载。
4、其他stats下令
如stats slabs,stats sizes,stats reset等等运用也比较常见。
四、其他常见下令
1、append
在现有的缓存数据后增加缓存数据,如现有缓存的key不存在服务器相应为NOT_STORED。
2、prepend
和append非常相似,但它的作用是在现有的缓存数据前增加缓存数据。
3、flush_all
该下令有一个可选的数字参数。它总是施行成功,服务器会发送 “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,并且供给了基于文件和目录的缓存依赖战略。对于缓存逾期战略也比较有探究的须要,不过个人开发中比较侧重于数据缓存和替代,当前尚无接触和运用过比较完善的逾期战略解决方案。
参考:
http://code.google.com/p/memcached/wiki/NewCommands
http://msdn.microsoft.com/zh-cn/library/system.runtime.caching.memorycache.aspx
//www.jb51.net/article/28837.htm
http://msdn.microsoft.com/zh-cn/library/system.web.caching.cache(v=VS.100).aspx