16.2.3.1 基本memcached操作

memcached 的接口支持以下用于在缓存中存储和检索信息的方法,这些方法在所有不同的 API 中都是一致的,尽管特定于语言的机制可能不同:

  • get(key):从缓存中检索信息。如果指定的键存在,则返回与该键关联的值。如果指定的键不存在,则 返回 NULLnil、 或相应语言中最接近的等价物。undefined

  • set(key, value [, expiry]):将与缓存中的键关联的项目设置为指定值。如果键已经存在,这将更新现有项目,或者如果键不存在,则添加新的键值对。如果指定了过期时间,则该项目会在达到过期时间时过期(并被删除)。时间以秒为单位,小于30天(30*24*60*60)为相对时间,大于此为绝对时间(epoch)。

  • add(key, value [, expiry]):如果指定的键尚不存在,则将键和关联值添加到缓存中。

  • replace(key, value [, expiry]): 替换与指定关联的项目key,仅当键已经存在时。新值由value参数给出。

  • delete(key [, time]):从缓存中删除 key及其关联的项目。如果您提供 a ,则在指定的时间段内阻止 time添加具有指定的另一个项目。key

  • incr(key , value): 将与 关联的项目增加key指定的value.

  • decr(key , value): 将与 关联的项目递减key指定的value.

  • flush_all:使缓存中的所有当前项目无效(或过期)。从技术上讲,它们仍然存在(它们没有被删除),但是当您下次尝试访问它们时,它们会被悄无声息地销毁。

在所有实现中,大部分或所有这些功能都通过相应的本地语言接口进行复制。

在可行的情况下,使用memcached来存储完整的项目,而不是缓存数据库中的单个列值。例如,当显示有关对象(发票、用户历史记录或博客文章)的记录时,从数据库中加载相关条目的所有数据,并将其编译到应用程序通常需要的内部结构中。将完整的对象保存在缓存中。

复杂的数据结构不能直接存储。大多数接口都会为你序列化数据,也就是说,把它放在一个可以重建原始指针和嵌套的文本形式中。Perl 使用Storable,PHP 使用 serialize,Python 使用 cPickle(or Pickle) 而 Java 使用Serializable接口。在大多数情况下,使用的序列化接口是可定制的。要在不同语言接口之间共享存储在memcached实例中的数据,请考虑使用常见的序列化解决方案,例如 JSON(Javascript 对象表示法)。