Client
Memcached客户端API
在客户端页面上已经说明了重置功能。如果希望把你的客户端发布到列表,请推送请求或分支到wiki。
旧列表基本过时。许多客户端已经过时。如果想知道使用什么客户端,应当搜索并留意你使用的语言信息。
绝大部分变成语言都有模块的索引(例如CPAN,NPM,Gem等等)。搜索的那些教程和文章,可以帮助你了解不同的客户端,可供你选择一个最适合你的需求。
Commands
Memcached行动只有几个基础命令。
完整文档可以在标准文档中找到。
标准协议
"标准协议"是Memcached涉及运行一条命令的"item(元素)"。一个item包括:
- 一个key(任意字符串,长度长达250bytes,不允许空格和换行的ASCII模式)
- 一个32bit的"flag"值
- 一个截止时间,以秒来表示。'0'表示永远不过期。可以长达30天。30天之后,将会按照Unix时间戳的准确时间进行处理。
- 一个64bit的"CAS"值,用于保持唯一性
- 任意数据
CAS是可选(可以通过-C彻底关闭,有更多的替代技术来补充该item,但这些替代技术需要与客户端进行协作)。
无应答
绝大部分的ASCII命令具有一个"noreply(无应答)"版本。通常不应当使用ASCII协议,因为不可能把请求和错误进行对照。ASCII命名的意图避免执行变化命令等待返回包(例如set或者add)。
二进制协议正确的执行无应答(quiet)实现。如果客户端支持或者使用二进制协议,能够提高命中的可能性。
存储命令
set
最常见的命令。存储数据,可能覆盖任何现有数据。最新的item在LRU的最顶部。
**备注:**LRU:Least Recently Used最近最少使用算法。
add
当数据内容不存在时,存储数据。新的item在LRU的最顶部。如果item已经存在在LRU并且add失败,将会提升item到LRU的前端。
replace
仅仅当数据已经存在时,存储数据。几乎从未使用,并且存在协议完整(set、add、replace等等)。
append
在已经存在的item的最后字节添加数据。不允许超过item的扩展限制。用于管理列表。
prepend
和append相同,但是在现存数据前添加新数据内容。
cas
cas是Check And Set(或者Compare And Swap)检查并设置或者比较并交换。存储数据的操作,但仅仅当没有人更新数据时才能够读取item。作为解决更新缓存数据时的竞争条件。
回收命令
get
命令的作用是获取数据。使用一个或者多个key,之后会返回所有找到的item。
gets
使用CAS的获取数据命令。返回一个item的CAS标识符(唯一的64bit的数值)。获取返回值需要通过cas命令。如果item的CAS值因为get命令而发生变化,则不会存储该值。
delete
如果item存在,则在cache中移除该item。
incr/decr
Increment(增长)和Decrement(减少)。如果item存储的是以字符串表示的64bit整型。可以通过incr或者decr命令来修改这个数值。仅仅只能通过incr函数修改后的数值是正整数,或者通过decr函数修改后的数值也是正整数。item不接受负值。
如果不存在所访问的值,incr/decr将会失败。
Statistics
只有少数命令返回计数器和memcached服务器的设置。可以通过强大的工具链工具或者telnet或者netcat这两种简单方式对服务器进行检查。这些将会在协议文档中解释。
stats
基本的统计命令
stats items
返回一些在memcached存储的items的信息,打破slab。
**备注:**slab是Linux操作系统的一种内存分配机制,slab分配算法采用cache 存储内核对象。
stats slabs
返回更多的在memcached存储的items信息,打破slab。更倾向于slab的性能,而不是item的计数器细节。
stats sizes
一个特殊的命令,显示有多少item将会被分配,slab切分成32byte大小的bucket, 而不是你现在slab数量。用于确定slab的大小是否高效。
警告这个是一个开发命令。作为1.4仍然是为一个命令,将会把memcached实例锁住一段时间。如果你有上百万的item存储,将会是memcached在几分钟之内无应答。在你自己的风险中可控运行。可以通过对每一个item逐个进行重新map来使这一功能提高速度。
flush_all
使所有已经存在item的cache失效。可选一个参数,意味着N秒之后使所有的item无效化。
这个命令不会暂停服务器,将会立即返回。这个命令不会释放或者刷新内存,而是让所有item元素过期。