8、memcached 和服务器的 local cache(比如 PHP 的 APC、
mmap 文件等)相比,有什么优缺点?
首先,local cache 有许多与上面(query cache)相同的问题。local cache 能够利
用的内存容量受到(单台)服务器空闲内存空间的限制。不过,local
cache 有一点比 memcached 和 query cache 都要好,那就是它不但可以存储任
意的数据,而且没有网络存取的延迟。
local cache 的数据查询更快。考虑把 highly common 的数据放在 local
cache 中吧。如果每个页面都需要加载一些数量较少的数据,考虑把它们放在
local
cached 吧。
local cache 缺少集体失效(group
invalidation)的特性。在 memcached 集群中,删除或更新一个 key 会让所有
的观察者觉察到。但是在local cache中, 我们只能通知所有的服务器刷新cache
(很慢,不具扩展性),或者仅仅依赖缓存超时失效机制。
local cache 面临着严重的内存限制,这一点上面已经提到。
9、memcached 的 cache 机制是怎样的?
Memcached 主要的 cache 机制是 LRU(最近最少用)算法+超时失效。当您存
数据到 memcached 中,可以指定该数据在缓存中可以呆多久 Which is forever,
or some time in the future。如果 memcached 的内存不够用了,过期的 slabs
会优先被替换,接着就轮到最老的未被使用的 slabs。10、memcached 如何实现冗余机制?
不实现!我们对这个问题感到很惊讶。Memcached 应该是应用的缓存层。它的设
计本身就不带有任何冗余机制。如果一个 memcached 节点失去了所有数据,您
应该可以从数据源(比如数据库)再次获取到数据。您应该特别注意,您的应用
应该可以容忍节点的失效。不要写一些糟糕的查询代码,寄希望于 memcached
来保证一切!如果您担心节点失效会大大加重数据库的负担,那么您可以采取一
些办法。比如您可以增加更多的节点(来减少丢失一个节点的影响),热备节点
(在其他节点 down 了的时候接管 IP),等等。