分布式缓存系统 memcached 简介

Memcached是一个开源的高性能分布式内存对象缓存系统,天然通用。但旨在通过减轻数据库负载来加快动态Web应用程序的使用。

 

Memcached 是一个基于内存的key-value结构数据的存储,适用于简单随意的数据存储,如数据库查询结果缓存,API调用返回结果缓存,或者页面渲染。

 

 

Memcached组成

客户端

客户端维护一组后端缓存服务器节点。

一个基于客户端(client-based)的哈希算法。

用于基于key来选择一个后端服务器节点来缓存数据。

服务器

缓存数据用,通过key将数据缓存在内部的一个哈希表中。

LRULeast Recently Used 近期最少使用算法

基于近期最少使用算法算法来决定在内存不够时丢弃老数据或者重用内存。

 

设计思想

简单的key/value存储

无关乎数据,无关乎结构

缓存的数据项由一个key,过期时间,可选的标记以及原始数据组成。

 

逻辑一半一半

一部分设计在客户端,一部分在服务器端。客户端决定选择哪个后端服务器来读取key/value数据,具体存储读取由服务器决定,包括非热点数据(old data)丢弃,内存回收和重用。

 

服务器相互不连通

服务器相互不连通,它们之间是隔离的并不知道对方的存在。没有通信,没有同步,没有广播,没有复制。

添加服务器加大可用内存;使缓存失效很简单,直接摘除后端对应的服务器节点,或者在后端对应服务器节点重新写入就行。

 

O(1)时间复杂度

尽可能快即锁友好,近乎确定和稳定的查询速度。在低端机上查询的效率基本在1ms以内;高端服务器能够达到每秒百万个key数据的吞吐量。

 

默认采用最近最少使用算法来缓存数据

过期机制

缓存数据将在给定的过期时间后过期,这种过期机制防止过时的数据被返回。刷新未使用的数据,努力保留经常请求的信息。

无需停顿以等待垃圾回收,确保较低的延迟

 

缓存失效

与其通过广播的方式使得还承诺的数据无效,客户直接解决使得服务器端数据无效。

 

结果呢?不管是从分布式还是实际应用角度来讲,这里边还是有太多的问题需要解决。很多具体的应用,多亏memcached已经足够稳定,同时变化的不多,影响得也不大,不然绝大多数见过的线上应用都得出大问题。

 

结果呢?memcached足够稳定。

 

猜你喜欢

转载自lobin.iteye.com/blog/2327378