Memcached 是一 个开 源的 ,高性 能的 内存 绶存 软件 ,从名 称上 看 Mem 就是 内存 的意 思, 而 Cache 就是 缓存 的意 思。 Memcached 的作 用: 通过在事先规划好的 内存 空间 中临 时绶 存数 据库 中的 各类 数据, 以 达到 减少 业务 对数 据库 的直 接高并发访 问, 从而 达到 提升 数据 库的 访问 性能 , 加 速网 站集 群动 态应 用服 务的 能力 。
memcached 服务 在企 业集 群架 构中 有哪 些应 用场 景?
a、完整缓存(易),静态缓存
例如:商品分类(京东),以及商品信息,可事先放在内存里,然后再对外提供
数据访问,这种先放到内存,我们称之为预热,(先把数据存缓存中),用户访
问时可以只读取 memcached 缓存,不读取数据库了。
b、执点缓存(难)
需要前端 web 程序配合,只缓存热点的数据,即缓存经常被访问的数据。
先预热数据库里的基础数据,然后在动态更新,选读取缓存,如果缓存里没有对
应的数据,程序再去读取数据库,然后程序把读取的新数据放入缓存存储。
早期的 Memcached 内存管理方式是通过 malloc 的分配的内存,使用完后通过free 来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效率。加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比memcached 进程本身还慢,为了解决这个问题,Slab Allocation 内存分配机制就延生了。
现在 Memcached 利用 Slab Allocation 机制来分配和管理内存。
Slab Allocation 机制原理是按照预先规定的大小,将分配给 memcached 的内存分割成特定长度的内存块(chunk),再把尺寸相同的内存块,分成组(chunks slab class),这些内存块不会释放,可以重复利用。而且,slab allocator 还有重复使用已分配的内存的目的。 也就是说,分配到的内存不会释放,而是重复利用。
Slab Allocation 的主要术语
Page分配给 Slab 的内存空间,默认是 1MB。分配给 Slab 之后根据 slab 的大小切分成chunk。
Chunk用于缓存记录的内存空间。
SlabClass特定大小的 chunk 的组。
Memcached 主要的 cache 机制是 LRU(最近最少用)算法+超时失效。当您存数据到 memcached 中,可以指定该数据在缓存中可以呆多久 Which is forever,or some time in the future。如果 memcached 的内存不够用了,过期的 slabs会优先被替换,接着就轮到最老的未被使用的 slabs。