Memcached 简介
一、Memcached 简介
如下图,当我们去访问一个 Web 站点,这台 Web 服务器会从数据库上读取数据并呈现给用户,如果没有 Memcached,那么用户每访问一次,Web 服务器就需要从数据库上读取数据,如果用户量很大,显然效率很低;有了 Memcached 之后,会把读取的数据(也就是存放在物理内存中的数据)以 key-value 形式缓存到 Memcached 自身开辟的内存中,当用户再次访问的时候就直接返回 Memcached 内存中的数据了,因此,Memcached(Memory Cached,内存缓存) 是一个内存对象缓存系统,能够缓存内存中的数据,但跟物理内存一样,机器一重启,缓存的数据就会丢失,重启 Memcached 也会导致数据丢失。
二、Memcached 内存管理机制
Memcached 会把物理内存中的数据以 key-value 形式缓存到 Memcached 自身开辟的内存中,至于划分多少物理内存给 Memcached,需要我们在启动 Memcached 的时候进行分配。Memcached 使用 Slab Allocator 机制来管理我们分配给它的物理内存,如下,Memcached 将我们分配给它的物理内存以 Page 为单位,默认情况下一个 Page 是 1M,一个 Page 分割成各种尺寸的块(Chunk), 并把尺寸相同的块分成组(Slab Class),即一个 Slab Class 包含了多个 Page,可以看出每个 Slab Class 负责管理的内存大小是不一样的,每个 Slab Class 只存储大于其上一个 Slab Class 的 size 并小于或者等于自己最大 size 的数据,实现最优的存储。如果分配给 Memcached 的物理内存存满了,则会根据 LRU 算法来删除缓存中的数据,也就是最近最少使用原则,最近一段时间来,哪一个数据基本完成没有被使用过,则就清除掉这个数据,然后让新数据放到里面。当然,我们也可以手动指定数据存储到 Memcached 的过期时间。