Memcached深入2

来源:互联网 发布:linux 监控java堆内存 编辑:程序博客网 时间:2024/04/29 06:40

准备面新浪。好好看下memcached。

memcached的特点?

如下:

memcached的协议是基于文本的,而不是基于复杂的xml的。

基于libevent的事件处理,即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个库,因此在linux、BSD、solaris的操作系统上能发挥其高性能。

在将不同的 key分散到不同的服务器上的时候,可以根据key的CRC校验码,来对服务器台数取模,得到的值就可以作为服务器的编号。但是这样不如使用一致性哈希好。

-----------------------------

信息会无限期地保留在缓存内,除非发生如下的情况:

  1. 为缓存分配的内存耗尽 — 在这种情况下,memcached 使用 LRU(最近最少使用)方法从此缓存删除条目。最近未曾使用的条目会从此缓存中先删除,最旧的最先访问。
  2. 条目被明确删除 — 总是可以从此缓存内人工用代码删除条目。
  3. 条目过期失效 — 各条目均有一个有效的期限以便针对此键存储的信息在过于陈旧时可从缓存中清除这些条目。

上述这些情况可以与您应用程序的逻辑综合使用以便确保缓存内的信息是最新的。有了这些基础知识后,让我们来看看在应用程序内如何能最好地利用 memcached。

使用缓存的过程如下:

 

主要的函数有:

get(key) — 从存储了特定键的 memcached 获得信息。 如果键不存在,就返回错误。
set(key, value [, expiry]) — 使用缓存内的标识符键存储这个特定的值。如果键已经存在,那么它就会被更新。期满时间的单位为秒,并且如果值小于 30 天 (30*24*60*60),那么就用作相对时间,如果值大于 30 天,那么就用作绝对时间 (epoch)。
add(key, value [, expiry]) — 如果键不存在就将这个键添加到缓存内,如果键已经存在就返回错误。如果您想要显式地添加一个新键而又不会因它已经存在而更新它,那么这个函数将十分有用。
replace(key, value [, expiry]) — 更新此特定键的值,如果键不存在就返回一个错误。
delete(key [, time]) — 从缓存中删除此键/值对。如果您提供一个时间,那么添加具有此键的一个新值就会被阻塞这个特定的时期。超时让您可以确保此值总是可以重新读取自您的数据中心。
incr(key [, value]) — 为特定的键增 1 或特定的值。只适用于数值。
decr(key [, value]) — 为特定的键减 1 或特定的值,只适用于数值。
flush_all — 让缓存内的所有当前条目无效(或到期失效)。

-------------------------------

将memcached引入产品的时候,最好计算一下slab的growth factor设置为多少比较合适。毕竟内存是比较珍贵的资源。比如数据的平均长度是在一个确定的范围之内,那么这个factor就可以做相应的调整了。

原创粉丝点击